All*_*Hsu 27 xcode dependencies ios cocoapods
首先,我打开了use_framework!在Podfile中.
假设主项目是MAIN_APP,两个子项目是FRAMEWORK_A和FRAMEWORK_B.
MAIN_APP需要FRAMEWORK_A和FRAMEWORK_B,FRAMEWORK_B也需要FRAMEWORK_A.
所有项目/目标都使用CocoaPods来管理第三方库.
现在,我的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
Run Code Online (Sandbox Code Playgroud)
我手动添加了FRAMEWORK_A来构建FRAMEWORK_B的设置,以及FRAMEWORK_A和FRAMEWORK_B来构建MAIN_APP的设置.
所有代码都编译得很好,但是在运行MAIN_APP时崩溃是因为它无法加载PodB的Framework.
我知道我也可以手动将PodB添加到MAIN_APP和FRAMEWORK_B,但是可以在Podfile中定义这种目标依赖吗?
顺便说一下,pod install我收到了警告:
[!] Podfile包含框架目标,Podfile不包含主机目标(嵌入框架的目标).
如果此项目用于进行框架开发,则可以忽略此消息.否则,将目标添加到嵌入这些框架的Podfile中,以使此消息消失(例如测试目标).
据我所知,我可以使用嵌套目标作为主机目标,如:
target :FRAMEWORK_A
target :MAIN_APP
end
end
Run Code Online (Sandbox Code Playgroud)
因此CocoaPods将设置MAIN_APP以使用FRAMEWORK_A并从FRAMEWORK_A继承pod依赖项.但似乎我不能用多个依赖项来做到这一点:
target :FRAMEWORK_A
target :MAIN_APP
end
end
target :FRAMEWORK_B
target :MAIN_APP
end
end
Run Code Online (Sandbox Code Playgroud)
因为target:MAIN_APP不能声明两次.
有没有更好的解决方案,而不是将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
Run Code Online (Sandbox Code Playgroud)
如您所见,我没有使用框架,而是使用 anabstract_target将它们组合在一起。我希望在 CocoaPods 中更容易实现这些类型的依赖。我知道这并不能真正回答你的问题,但它可能会有所帮助。
我认为您也可以通过制作本地(静态库)pod 来解决这个问题FrameworkA,FrameworkB它会为您删除所有内容的重复项并将其正确集成到主机应用程序中。
示例: https: //github.com/rob-keepsafe/PodFrameworksIssue
master分支显示重复的类和伞框架,就像你一样deduped分支将内部动态框架放入本地 Pod(作为静态库)以消除重复并仍然链接到依赖项| 归档时间: |
|
| 查看次数: |
5580 次 |
| 最近记录: |