ios – 如何使用CocoaPods与多个Framework子项目

前端之家收集整理的这篇文章主要介绍了ios – 如何使用CocoaPods与多个Framework子项目前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
首先,我已经打开了use_framework!在Podfile. @H_403_2@假设主项目是MAIN_APP,两个子项目是FRAMEWORK_A和FRAMEWORK_B.

@H_403_2@MAIN_APP需要FRAMEWORK_A和FRAMEWORK_B,FRAMEWORK_B也需要FRAMEWORK_A.

@H_403_2@所有项目/目标都使用CocoaPods来管理第三方库.

@H_403_2@现在,我的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
@H_403_2@我手动添加了FRAMEWORK_A来构建FRAMEWORK_B的设置,以及FRAMEWORK_A和FRAMEWORK_B两者来构建MAIN_APP的设置.

@H_403_2@所有代码编译都很好,但是当运行MAIN_APP崩溃,因为它无法加载Framework的PodB.

@H_403_2@我知道我可以手动将PodB添加到MAIN_APP和FRAMEWORK_B,但是可以在Podfile中定义这种目标依赖关系吗?

@H_403_2@Btw,pod安装时,我收到警告:

@H_403_2@[!] The Podfile contains framework targets,for which the Podfile does not contain host targets (targets which embed the framework).

@H_403_2@If this project is for doing framework development,you can ignore this message. Otherwise,add a target to the Podfile that embeds these frameworks to make this message go away (e.g. a test target).

@H_403_2@据我所知,我可以使用嵌套目标为主机目标,如:

target :FRAMEWORK_A
    target :MAIN_APP
    end
end
@H_403_2@所以CocoaPods将设置MAIN_APP使用FRAMEWORK_A并继承来自FRAMEWORK_A的pod依赖.但是似乎我不能像多个依赖关系那样做:

target :FRAMEWORK_A
    target :MAIN_APP
    end
end
target :FRAMEWORK_B
    target :MAIN_APP
    end
end
@H_403_2@因为target:MAIN_APP不能被声明两次.

@H_403_2@有没有更好的解决方案,而不是将pod依赖项定义为Podfile中的一个功能,并包含在所有目标中?

解决方法

这是一个很好的问题,我也遇到了类似的情况.这是我的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
@H_403_2@正如你可以看到我没有使用框架,我使用一个abstract_target来将它们组合在一起.我希望这些依赖关系在CocoaPods中更容易做到.我知道这不是真的回答你的问题,但它可能是有益的.

猜你在找的iOS相关文章