Интеграция стручков со всеми объектами
Я использую CocoaPods уже несколько недель с моим iOS-приложением, и он отлично работает с одной целью, которую я тестировал (позвольте ей назвать "MainApp" ). Тем не менее, теперь я хочу создать другую цель ( "MyAppLite" ) и заметил, что сбой сборки (файл не найден в одном из заголовочных файлов).
Различия в настройках сборки, которые я заметил, следующие:
- Другие флаги компоновщика не содержат необходимых фреймворков в MyAppLite
- Пути поиска в Framework/Header/Library пусты в MyAppLite
- Ни один из пользовательских настроек сборки в MainApp не присутствует в MyAppLite
Как я могу гарантировать, что при запуске pod install
все объекты имеют связанные библиотеки?
Для справки, вот мой подфайл:
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'
Ответы
Ответ 1
С CocoaPods 1.x
Вы можете использовать блоки target
platform :ios, '13.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
Соответствующая документация
Ответ 2
Для 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
Ответ 3
Если у вас большое количество целей и вы не хотите добавлять новые цели каждый раз, вы можете использовать это
def common_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
project = Xcodeproj::Project.open './<projectNameHere>.xcodeproj"
project.targets.each do |t|
target t.name do
common_pods
end
Ответ 4
Из документов:
Если явная цель не указана, то целевой объект Pods будет связан с первой целью в вашем проекте.
Вы можете использовать link_with для связи с дальнейшими целями.
Также см. Несколько целей в документации Cocoapods, если вам нужны разные конфигурации зависимостей для разных целей