我收到此警告:
Class X is implemented in both <framework> and <application> one of the two will be used, which one is undefined
此警告在网络上有很多内容,但我找不到能解决我遇到的具体问题的任何内容。
方案
我已经构建了MyFramework和MyApplication(作为MyFramework的测试/演示应用程序)。
MyFramework使用CocoaPod(我将其称为CoolPod),我也想在MyApplication中使用它(并且假设MyFramework的消费者也是合理的。)
我需要能够将MyFramework分发为.framework(用于封闭源代码)。但是,这意味着MyFramework将CoolPod嵌入其编译库中。
现在,当我将MyFramework和CoolPod导入MyApplication时,我得到了这个冲突(输出上面显示的警告),因为CoolPod的类已经包含在MyFramework的库中(因为嵌入了CoolPod)。
所以我们有这个结构:
CoolPod -> MyFramework \
MyApplication
CoolPod /
问题
如何避免这种冲突?
我已经考虑过在MyApplication中包含CoolPod的标题(但不包括它的lib),但这对于一个简单的案例来说似乎过于复杂。
非常感谢任何帮助,这实在是在阻止我。
谢谢,
靛蓝
答案 0 :(得分:2)
对于闭源静态库,我们建议使用cocoapods-packager。我不确定它是否支持框架。
答案 1 :(得分:2)
我的解决方案是从cocoa pod获取源代码并为其创建Cocoa Touch Framework。然后我将框架链接到我的api和我的测试应用程序。 这不是很好但是我能做的很快。我相信Cocoapods正致力于支持框架,因此这个解决方案很快就会过时。
我的公司还使用gradle for dependencies(java)和构建脚本。所以我创建了一个groovy / gradle构建任务来构建我的框架和我的支持框架(cocoapod框架)并从中创建一个通用框架。然后它拉链所有框架。这意味着我可以分发一个符合所有要求的zip。这显然不是最好的分发方式(我们将通过依赖于我们的封闭源框架的Cocoapods进行分发),但设置速度很快。
答案 2 :(得分:1)
如果您想要快速解决方案 - 只需将MyFramework项目作为子项目添加到MyApplication项目中。你仍然可以将cocoa pod用于你的框架和测试应用程序(但是只包括你的“常见”lib和pods到框架项目)
答案 3 :(得分:0)
您可以将MyFramework
作为依赖项来为CoolPod
创建一个Podspec。
您的 MyFramework.podspec 如下所示:
Pod::Spec.new do |spec|
spec.name = 'TestFW'
spec.version = '1.0.0'
spec.license = { :type => 'BSD' }
spec.homepage = 'https://github.com/user/TestFW'
spec.authors = { 'Auther Name' => 'author@gmail.com' }
spec.summary = 'Testing FW Pod with Test App'
spec.source = { :git => 'https://github.com/user/TestFW.git' }
spec.module_name = 'TestFW'
spec.ios.source_files = 'TestFW/*.swift'
spec.dependency 'CoolPod'
end
您的MyApplication
的 podfile 如下所示:
target 'TestApp' do
use_frameworks!
pod 'CoolPod'
pod 'TestFW'
end