Подтвердить что ты не робот

Интеграция стручков со всеми объектами

Я использую 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'
4b9b3361

Ответ 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, если вам нужны разные конфигурации зависимостей для разных целей