Как использовать 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 как функции в подфайле и включать во все целевые?
Ответы
Ответ 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. Я знаю, что это не отвечает на ваш вопрос, но, тем не менее, это может быть полезно.