xcode - guide - install pods in swift
¿Cómo especifico objetivos múltiples en mi podfile para mi proyecto de Xcode? (4)
Estoy usando CocoaPods con mi proyecto Xcode 4 y tengo tres objetivos para mi proyecto (el predeterminado, uno para construir una versión lite y uno para construir una versión demo). Todos los objetivos utilizan las mismas bibliotecas, pero CocoaPods solo está agregando la biblioteca estática y las rutas de búsqueda al objetivo 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 objetivo 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 sintaxis 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 objetivos.
Lo uso con pruebas unitarias como link_with ''App'', ''App-Tests''
(cuidado con los espacios en los nombres del objetivo).
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 guides.cocoapods.org/syntax/podfile.html#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/
La forma más fácil es usar un objetivo abstracto, donde cada pod especificado se vinculará con todos los objetivos.
abstract_target ''someNameForAbstractTarget'' do
pod ''podThatIsForAllTargets''
end
target ''realTarget'' do
pod ''podThatIsOnlyForThisTarget''
end
Si quieres que varios objetivos 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