Comment spécifier plusieurs cibles dans mon podfile pour mon projet Xcode?

J’utilise CocoaPods avec mon projet Xcode 4 et j’ai trois cibles pour mon projet (la valeur par défaut, une pour la construction d’une version allégée et une pour la construction d’une version de démonstration). Toutes les cibles utilisent les mêmes bibliothèques, mais CocoaPods ajoute uniquement la bibliothèque statique et les chemins de recherche à la cible principale. Mon podfile ressemble à ceci:

platform :ios, '5.0' pod 'TestFlightSDK', '>= 1.1' pod 'MBProgressHUD', '0.5' pod 'iRate', '>= 1.6.2' pod 'TimesSquare', '1.0.1' pod 'AFNetworking', '1.1.0' pod 'KKPasscodeLock', '0.1.5' pod 'iCarousel', '1.7.4' 

La seule façon dont cela fonctionnait était de spécifier chaque cible individuellement avec tous les modules listés à nouveau.

 platform :ios, '5.0' target :default do pod 'TestFlightSDK', '>= 1.1' pod 'MBProgressHUD', '0.5' pod 'iRate', '>= 1.6.2' pod 'TimesSquare', '1.0.1' pod 'AFNetworking', '1.1.0' pod 'KKPasscodeLock', '0.1.5' pod 'iCarousel', '1.7.4' end target :lite do link_with 'app-lite' pod 'TestFlightSDK', '>= 1.1' pod 'MBProgressHUD', '0.5' pod 'iRate', '>= 1.6.2' pod 'TimesSquare', '1.0.1' pod 'AFNetworking', '1.1.0' pod 'KKPasscodeLock', '0.1.5' pod 'iCarousel', '1.7.4' end target :demo do link_with 'app-demo' pod 'TestFlightSDK', '>= 1.1' pod 'MBProgressHUD', '0.5' pod 'iRate', '>= 1.6.2' pod 'TimesSquare', '1.0.1' pod 'AFNetworking', '1.1.0' pod 'KKPasscodeLock', '0.1.5' pod 'iCarousel', '1.7.4' end 

Y a-t-il une meilleure manière de faire cela?

CocoaPods 1.0 a modifié la syntaxe pour cela. Il ressemble maintenant à ceci:

 def shared_pods pod 'SSKeychain', '~> 0.1.4' pod 'INAppStoreWindow', :head pod 'AFNetworking', '1.1.0' pod 'Reachability', '~> 3.1.0' pod 'KSADNTwitterFormatter', '~> 0.1.0' pod 'MASShortcut', '~> 1.1' pod 'MagicalRecord', '2.1' pod 'MASPreferences', '~> 1.0' end target 'Sail' do shared_pods end target 'Sail-iOS' do shared_pods end 

OUT CocoonPods 1.0 réponse:

Oui, il y a une meilleure façon! Découvrez link_with où vous pouvez faire link_with 'MyApp', 'MyOtherApp' pour spécifier plusieurs cibles.

Je l’utilise avec des tests unitaires comme link_with 'App', 'App-Tests' (méfiez-vous des espaces dans les noms des cibles).

Exemple:

 platform :osx, '10.8' link_with 'Sail', 'Sail-Tests' pod 'SSKeychain', '~> 0.1.4' pod 'INAppStoreWindow', :head pod 'AFNetworking', '1.1.0' pod 'Reachability', '~> 3.1.0' pod 'KSADNTwitterFormatter', '~> 0.1.0' pod 'MASShortcut', '~> 1.1' pod 'MagicalRecord', '2.1' pod 'MASPreferences', '~> 1.0' 

Mise à jour 2017

Vous pouvez utiliser abstract_target

 # Note: There are no targets called "Shows" in any of this workspace's Xcode projects abstract_target 'Shows' do pod 'ShowsKit' # The target ShowsiOS has its own copy of ShowsKit (inherited) + ShowWebAuth (added here) target 'ShowsiOS' do pod 'ShowWebAuth' end # The target ShowsTV has its own copy of ShowsKit (inherited) + ShowTVAuth (added here) target 'ShowsTV' do pod 'ShowTVAuth' end # Our tests target has its own copy of # our testing frameworks, and has access # to ShowsKit as well because it is # a child of the abstract target 'Shows' target 'ShowsTests' do inherit! :search_paths pod 'Specta' pod 'Expecta' end end 

Je pense que la meilleure solution est

 # Podfile platform :ios, '8.0' use_frameworks! # Available pods def available_pods pod 'AFNetworking', '1.1.0' pod 'Reachability', '~> 3.1.0' end target 'demo' do available_pods end target 'demoTests' do available_pods end 

Référence de: http://natashatherobot.com/cocoapods-installing-same-pod-multiple-targets/

Si vous souhaitez que plusieurs cibles partagent les mêmes modules, utilisez un abstract_target.

 # There are no targets called "Shows" in any Xcode projects abstract_target 'Shows' do pod 'ShowsKit' pod 'Fabric' # Has its own copy of ShowsKit + ShowWebAuth target 'ShowsiOS' do pod 'ShowWebAuth' end # Has its own copy of ShowsKit + ShowTVAuth target 'ShowsTV' do pod 'ShowTVAuth' end end 

ou juste

 pod 'ShowsKit' pod 'Fabric' # Has its own copy of ShowsKit + ShowWebAuth target 'ShowsiOS' do pod 'ShowWebAuth' end # Has its own copy of ShowsKit + ShowTVAuth target 'ShowsTV' do pod 'ShowTVAuth' end 

source: https://guides.cocoapods.org/using/the-podfile.html

Le moyen le plus simple consiste à utiliser une cible abstraite, où chaque module spécifié sera lié à toutes les cibles.

 abstract_target 'someNameForAbstractTarget' do pod 'podThatIsForAllTargets' end target 'realTarget' do pod 'podThatIsOnlyForThisTarget' end