web-dev-qa-db-fra.com

Comment ajouter des configurations de projet personnalisées à Xcode lors de l'utilisation de CocoaPods?

J'ai un projet iOS/OS X Xcode, où j'utilise CocoaPods, et je n'arrive pas à comprendre comment ajouter mes propres configurations de projet (en plus de Debug et Release) sans faire exploser complètement la build.

Dans le projet, j'ai un certain nombre de cibles, pour les applications sur les deux plates-formes et ses extensions d'application. L'espace de travail Xcode a bien sûr également le projet Pods.

Parce que le projet crée des cibles pour iOS et Mac, j'utilise des "cibles" CocoaPods pour regrouper leurs pods. Mon Podfile ressemble à ceci:

source 'https://github.com/CocoaPods/Specs.git'

target :iOS do
  platform :ios, '7.1'
  link_with 'iOS', 'NozbeToday', 'NozbeShare', 'NozbeWatch'

  # pods...
end

target :Mac do
  platform :osx, '10.9'
  link_with 'Mac'

  # pods...
end

Voici maintenant où j'ai un problème. Jusqu'à présent, je n'ai eu que les configurations par défaut "Debug" et "Release" dans mon projet. Je voulais les modifier et en ajouter de nouveaux pour une combinaison différente de profil d'approvisionnement/ID de bundle.

… Et je suis coincé. Je ne sais pas comment faire ça.

Le premier signe du problème était un avertissement pod install craché pour chaque combinaison cible/configuration:

[!] CocoaPods n'a pas défini la configuration de base de votre projet car votre projet possède déjà un ensemble de configuration personnalisé. Pour que l'intégration de CocoaPod fonctionne, veuillez définir les configurations de base de la cible NozbeToday sur Pods/Target Support Files/Pods-iOS/Pods-iOS.dev debug.xcconfig ou incluez le Pods/Target Support Files/Pods-iOS/Pods-iOS.dev debug.xcconfig dans votre configuration de build.

Je ne pouvais pas comprendre ce que cela signifie et comment y remédier. Quoi qu'il en soit, le projet ne serait pas construit - dans le meilleur des cas, j'obtiendrais une erreur de l'éditeur de liens disant qu'il ne peut pas trouver Pods-something.a

48
radex

OK, alors à mi-chemin de l'écriture de cette question, je l'ai compris moi-même (yay ducking en caoutchouc). Voici la solution pour les prochaines générations:

Essentiellement, vous devez ajouter une dépendance explicite à la cible Pods à votre schéma d'application.

La façon dont vous le faites est la suivante: modifiez votre schéma d'application, accédez à la section Build et ajoutez la cible Pods ci-dessus votre cible d'application. Vous devriez voir quelque chose comme ceci:

enter image description here

Et ça va juste marcher.


Quant aux avertissements CocoaPods sur pod install, vous devez utiliser les fichiers xcconfig générés par CP pour chacune de vos configurations Xcode. La façon dont vous le faites est:

  • recherchez les fichiers .xcconfig dans Pods/Target Support Files
  • faites-les glisser et déposez-les dans le groupe "Pods" de votre projet Xcode (ajoutez une référence uniquement. Ne copiez pas pour cibler ou ajoutez à la construction)
  • Cliquez sur le projet dans le navigateur de projet et sélectionnez le projet lui-même (pas une des cibles). Accédez à Info et sous Configurations, définissez le bon .xcconfigs pour chaque configuration et cible dans la colonne "Basé sur le fichier de configuration".

Vous aurez également besoin de quelque chose comme ça dans votre Podfile pour que CocoaPods sache lesquelles de vos configurations Xcode sont "debug" (non optimisées), qui sont "release":

project '1Nozbe', {
  'iOS 1 Dev Debug' => :debug,
  'iOS 2 Dev AdHoc' => :release,
  'iOS 3 Release Debug' => :debug,
  'iOS 4 Release AdHoc' => :release,
  'iOS 5 Release AppStore' => :release,
}

Pas exactement lié à CocoaPods, mais si vous avez d'autres dépendances (sous-projet) autres que CP, vous devrez également faire deux choses:

  • ajouter des dépendances explicites sur la cible du sous-projet (comme sur la capture d'écran ci-dessus)
  • renommer/ajouter des configurations dans votre sous-projet afin qu'elles soient identiques à votre projet principal. (Sinon, Xcode ne sait tout simplement pas quelle configuration utiliser avec votre sous-projet)
42
radex

Ajoutez cette ligne dans votre fichier de configuration, tout comme pour importer un fichier d'en-tête:

#include "Pods/Target Support Files/Pods/Pods.debug.xcconfig"

REMARQUE: c'est #include, ne pas #import

10
leavez