Как указать несколько целей в моем подфайле для моего проекта Xcode?
Я использую CocoaPods с моим проектом Xcode 4, и у меня есть три цели для моего проекта (по умолчанию, один для создания облегченной версии и один для создания демо-версии). Все целевые объекты используют одни и те же библиотеки, но CocoaPods только добавляет статическую библиотеку и пути поиска к основной цели. Мой подфайл выглядит так:
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'
единственный способ заставить это работать - указать каждую цель индивидуально со всеми перечисленными стручками снова.
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
есть ли лучший способ сделать это?
4 ответов:
CocoaPods 1.0 изменил синтаксис для этого. Теперь это выглядит так:
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
устаревший Pre CocoaPods 1.0 ответ:
Да есть лучший способ! Проверьте
link_withгде можно сделатьlink_with 'MyApp', 'MyOtherApp'указать несколько целей.Я использую это с модульными тестами, такими как
link_with 'App', 'App-Tests'(остерегайтесь пробелов в именах цели).пример:
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'
2017 обновление
можно использовать 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
Я думаю, что лучшее решение
# 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ссылка из : http://natashatherobot.com/cocoapods-installing-same-pod-multiple-targets/
Если вы хотите, чтобы несколько целей совместно использовали одни и те же модули, используйте 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или просто
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источник:https://guides.cocoapods.org/using/the-podfile.html
самый простой способ-использовать абстрактную цель, где каждый указанный модуль будет связан со всеми целями.
abstract_target 'someNameForAbstractTarget' do pod 'podThatIsForAllTargets' end target 'realTarget' do pod 'podThatIsOnlyForThisTarget' end
Comments