如何在多个Framework子项目中使用CocoaPods
首先,我已经打开了use_framework! 在Podfile中。
假设主项目是MAIN_APP,两个子项目是FRAMEWORK_A和FRAMEWORK_B。
MAIN_APP需要FRAMEWORK_A和FRAMEWORK_B,而FRAMEWORK_B也需要FRAMEWORK_A。
所有项目/目标都使用CocoaPods来pipe理第三方库。
现在,我的Podfile看起来像:
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构buildFRAMEWORK_B的设置,FRAMEWORK_A和FRAMEWORK_B构buildMAIN_APP的设置。
所有代码编译良好,但是当运行MAIN_APP崩溃时,因为无法加载PodB框架。
我知道我可以手动添加PodB到MAIN_APP和FRAMEWORK_B,但是可以在Podfile中定义这种目标依赖项吗?
顺便说一句,当pod install
,我得到了警告:
[!] Podfile包含框架目标,Podfile不包含主机目标(embedded框架的目标)。
如果这个项目是做框架开发的,你可以忽略这个消息。 否则,将一个目标添加到embedded这些框架的Podfile以使该消息消失(例如,testing目标)。
据我所知,我可以使用宿主目标的嵌套目标,如:
target :FRAMEWORK_A target :MAIN_APP end end
所以CocoaPods将设置MAIN_APP来使用FRAMEWORK_A并从FRAMEWORK_Ainheritancepod依赖。 但似乎我不能做到像多个依赖:
target :FRAMEWORK_A target :MAIN_APP end end target :FRAMEWORK_B target :MAIN_APP end end
因为目标:MAIN_APP不能被声明两次。
有没有更好的解决scheme,而不是在Podfile中将pod依赖项定义为函数,并且包含在所有目标中?
这是一个很好的问题,我也遇到了类似的情况。 这是我的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中更容易实现。 我知道这并不能真正回答你的问题,但它可能有帮助。