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

Как использовать CocoaPods с несколькими подпроектами Framework

Прежде всего, я включил use_framework! в подфайле.

Предположим, что основным проектом является MAIN_APP, а два подпроекта: FRAMEWORK_A и FRAMEWORK_B.

MAIN_APP требует FRAMEWORK_A и FRAMEWORK_B, а FRAMEWORK_B также требует FRAMEWORK_A.

Все проекты/цели используют CocoaPods для управления сторонними библиотеками.

В настоящее время мой подфайл выглядит следующим образом:

target :MAIN_APP do
    project 'MAIN_APP'
    pod 'PodA'
end

target :FRAMEWORK_A do
    project 'FRAMEWORK_A'
    pod 'PodB'
end

target :FRAMEWORK_B do
    project 'FRAMEWORK_B'
    pod 'PodC'
end

Я вручную добавил FRAMEWORK_A для создания настроек FRAMEWORK_B и FRAMEWORK_A и FRAMEWORK_B для создания настроек MAIN_APP.

Весь код компилируется хорошо, но при запуске MAIN_APP происходит сбой, потому что он не может загрузить Framework of PodB.

Я знаю, что я могу вручную добавить PodB в MAIN_APP и FRAMEWORK_B, но можно ли определить эту целевую зависимость в подфайле?

Btw, когда pod install, я получил предупреждение:

[!] Подфайл содержит объекты каркаса, для которых подфайл не содержит целевые объекты (цели, которые вставляют фреймворк).

Если этот проект предназначен для разработки рамок, вы можете игнорировать это сообщение. В противном случае добавьте цель в подфайл, который внедряет эти фреймворки, чтобы убрать это сообщение (например, тестовый объект).

Как я знаю, я могу использовать вложенную цель для целей хоста, например:

target :FRAMEWORK_A
    target :MAIN_APP
    end
end

Таким образом, CocoaPods настроит MAIN_APP для использования FRAMEWORK_A и наследует зависимостей pod от FRAMEWORK_A. Но кажется, что я не могу сделать это с помощью нескольких зависимостей типа:

target :FRAMEWORK_A
    target :MAIN_APP
    end
end
target :FRAMEWORK_B
    target :MAIN_APP
    end
end

Поскольку цель: MAIN_APP не может быть объявлена ​​дважды.

Есть ли какие-либо лучшие решения вместо определения зависимостей pod как функции в подфайле и включать во все целевые?

4b9b3361

Ответ 1

Это отличный вопрос, и я столкнулся с подобной ситуацией. Это мой PodFile:

platform :ios, '8.0'

workspace 'mygreatapp.xcworkspace'

project 'app/MyGreatApp/MyGreatApp.xcodeproj'
project 'platform/MyGreatFramework/MyGreatFramework.xcodeproj'

abstract_target 'This can say whatever you want' do

    target 'MyGreatApp' do
        project 'app/MyGreatApp/MyGreatApp.xcodeproj'
        pod 'AFNetworking', '~> 2.6.0'
        pod 'PromiseKit', '~> 1.5'
        pod 'PromiseKit/Join'
        pod 'KVOController', '~> 1.0'
        pod 'FLAnimatedImage', '~> 1.0'
        pod 'Crashlytics', '~> 3.3'
        pod 'SSZipArchive'
    end

    target 'MyGreatAppTests' do
        project 'app/MyGreatApp/MyGreatApp.xcodeproj'
        pod 'OCMock', '~> 3.1'
    end

    target 'MyGreatFramework' do
        project 'platform/MyGreatFramework/MyGreatFramework.xcodeproj'
        pod 'SSZipArchive'
    end

    target 'MyGreatFrameworkTests' do
        project 'platform/MyGreatFramework/MyGreatFramework.xcodeproj'
        pod 'OCMock', '~> 3.1'
    end

    post_install do |installer|
      installer.pods_project.targets.each do |target|
        target.build_configurations.each do |config|
          config.build_settings['ENABLE_BITCODE'] = 'NO'
        end
      end
    end
end

Как вы можете видеть, я не использую фреймворки, и я использую abstract_target, чтобы сгруппировать все это вместе. Я хотел бы, чтобы эти зависимости были проще сделать в CocoaPods. Я знаю, что это не отвечает на ваш вопрос, но, тем не менее, это может быть полезно.