¿Cómo especifico objectives múltiples en mi podfile para mi proyecto de Xcode?

Estoy usando CocoaPods con mi proyecto Xcode 4 y tengo tres objectives para mi proyecto (el predeterminado, uno para construir una versión lite y uno para construir una versión demo). Todos los objectives utilizan las mismas bibliotecas, pero CocoaPods solo está agregando la biblioteca estática y las rutas de búsqueda al objective principal. Mi podfile se ve así:

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 única forma en la que conseguí que esto funcionara fue especificar cada objective individualmente con todos los pods enumerados de nuevo.

 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 

¿Hay una mejor manera de hacer esto?

CocoaPods 1.0 ha cambiado la syntax para esto. Ahora se ve así:

 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 

OUTCATED Pre CocoaPods 1.0 respuesta:

Sí, hay una mejor manera! Consulte link_with donde puede hacer link_with 'MyApp', 'MyOtherApp' para especificar múltiples objectives.

Lo uso con pruebas unitarias como link_with 'App', 'App-Tests' (cuidado con los espacios en los nombres del objective).

Ejemplo:

 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' 

Actualización 2017

Puedes usar 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 

Creo que una mejor solución es

 # 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 

Referencia de: http://natashatherobot.com/cocoapods-installing-same-pod-multiple-targets/

Si quieres que varios objectives compartan los mismos pods, usa 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 

o solo

 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 

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

La forma más fácil es usar un objective abstracto, donde cada pod especificado se vinculará con todos los objectives.

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