2013-08-29 4 views
14

Я использую CocoaPods в течение нескольких недель с моим приложением iOS, и он отлично работает с одной целью, которую я тестировал (назовем ее «MainApp»). Тем не менее, теперь я хочу создать другую цель («MyAppLite») и заметил, что сбой сборки (файл не найден в одном из заголовочных файлов pods).Интеграция стручков со всеми объектами

Различия в параметрах сборки я заметил следующее:

  • Других флаги компоновщик не содержат необходимые рамки в MyAppLite
  • Framework/Заголовок/Библиотека Поиск Дорожка все пуста в MyAppLite
  • ни один из определяемых пользователем Параметры построения в MainApp не присутствуют в MyAppLite

Как я могу гарантировать, что, когда я бегу pod install, все tĀ У библиотек связаны ссылки?

Для справки, вот мой Podfile:

platform :ios, '5.0' 

pod 'TTTAttributedLabel', '~> 1.7.0' 
pod 'iRate', '~> 1.7.5' 
pod 'MBProgressHUD', '~> 0.6' 
pod 'FlurrySDK', '~> 4.2.3' 
pod 'ACSimpleKeychain', '~> 0.0.1' 
pod 'WEPopover', '~> 0.0.1' 
pod 'AFNetworking', '~> 1.3.1' 
pod 'Nimbus', '~> 1.0.0' 
pod 'QuincyKit', '~> 2.1.9' 
+0

Пожалуйста, обратитесь к http://stackoverflow.com/a/34905278/1033581 для Cocoapods 1.0.0 совместимости. –

ответ

13

Вы можете использовать link_with директиву

platform :ios, '5.0' 

pod 'TTTAttributedLabel', '~> 1.7.0' 
pod 'iRate', '~> 1.7.5' 
pod 'MBProgressHUD', '~> 0.6' 
pod 'FlurrySDK', '~> 4.2.3' 
pod 'ACSimpleKeychain', '~> 0.0.1' 
pod 'WEPopover', '~> 0.0.1' 
pod 'AFNetworking', '~> 1.3.1' 
pod 'Nimbus', '~> 1.0.0' 
pod 'QuincyKit', '~> 2.1.9' 

link_with "MyApp" 
link_with "MyAppLite" 

Это произведет libPods.a и соединит его Target1 и Target1 ,

Соответствующие documentation:

  • Обратите внимание, что cocoapods автоматически связывает каждую цель в podfile с вашим проектом. По этой причине имена целей должны совпадать. Если по какой-либо причине вы хотите, чтобы указать цель в вашей podfile с другим именем, вы можете установить link_with атрибут:

    target :test, :exclusive => true do 
        link_with 'MyAppTests' 
    end 
    
  • Targets, по умолчанию, являются исключительными, если их родитель имеет другую платформу.

  • Основная цель подфайла всегда связана с первой целью финального проекта.

+2

Это по существу то, что я сделал, но я должен был определить явную цель, содержащую все элементы, а затем строку 'link_with ['MyApp', 'MyAppLite']' перед списком контейнеров. – colincameron

+0

Могу ли я спросить, почему вы должны это сделать? –

+0

Не уверен, что это не сработает. – colincameron

2

Из документов:

Если не указана явно цели, то цель Бобов будет связана с первой целью в проекте.

Вы можете использовать link_with для связи с другими объектами.

Также см Multiple Targets в документации Cocoapods, если вам нужны различные конфигурации зависимостей для различных целей

+0

Настройки сборки устанавливаются автоматически с помощью 'pod install' - я не хочу запускать ручную работу с вещами, которые должны быть правильно сгенерированы автоматически - разве это не весь смысл CocoaPods? – colincameron

+0

Кроме того, я хочу установить точно такие же зависимости для всех целей. – colincameron

+0

ОК. Я обновил ответ. Надеюсь, поможет. – serrrgi

24

Для CocoaPods 1.0.0, рекомендация от разработчиков является использованием abstract_target (но не совместим с 0.39.0):

platform :ios, '5.0' 

abstract_target 'defaults' do 
    pod 'TTTAttributedLabel', '~> 1.7.0' 
    pod 'iRate', '~> 1.7.5' 
    pod 'MBProgressHUD', '~> 0.6' 
    pod 'FlurrySDK', '~> 4.2.3' 
    pod 'ACSimpleKeychain', '~> 0.0.1' 
    pod 'WEPopover', '~> 0.0.1' 
    pod 'AFNetworking', '~> 1.3.1' 
    pod 'Nimbus', '~> 1.0.0' 
    pod 'QuincyKit', '~> 2.1.9' 

    target 'MyApp' 
    target 'MyAppLite' 
end 

Для CocoaPods 0.39.0 + 1.0.0 совместимости, используя def отлично работает (но не рекомендуется по дэвам):

platform :ios, '5.0' 

def default_pods 
    pod 'TTTAttributedLabel', '~> 1.7.0' 
    pod 'iRate', '~> 1.7.5' 
    pod 'MBProgressHUD', '~> 0.6' 
    pod 'FlurrySDK', '~> 4.2.3' 
    pod 'ACSimpleKeychain', '~> 0.0.1' 
    pod 'WEPopover', '~> 0.0.1' 
    pod 'AFNetworking', '~> 1.3.1' 
    pod 'Nimbus', '~> 1.0.0' 
    pod 'QuincyKit', '~> 2.1.9' 
end 

target 'MyApp' do 
    default_pods 
end 

target 'MyAppLite' do 
    default_pods 
end