类X在<framework>和<application>中实现,将使用其中一个,其中一个是未定义的</application> </framework>

时间:2015-01-01 00:15:40

标签: ios cocoapods ios-frameworks

我收到此警告:

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提供给MyFramework吗?
  • 我是否必须通过MyFramework管理CoolPod的标题?

我已经考虑过在MyApplication中包含CoolPod的标题(但不包括它的lib),但这对于一个简单的案例来说似乎过于复杂。

非常感谢任何帮助,这实在是在阻止我。

谢谢,

靛蓝

4 个答案:

答案 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