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

我得到这个警告:

Class X is implemented in both <framework> and <application> one of the two will be used, which one is undefined 

这个警告覆盖了整个networking,但我还没有find任何答案,我正在解决的具体问题。

脚本

我已经构build了MyFramework和MyApplication(作为MyFramework的testing/演示应用程序)。

MyFramework使用了一个CocoaPod(我将其称为CoolPod),我也希望在MyApplication中使用它(假设MyFramework的使用者也是合理的)。

我需要能够将MyFramework作为一个.framework(用于封闭源代码)进行分发。 但是,这意味着MyFramework将CoolPodembedded到其编译的库中。

现在,当我将MyFramework和CoolPod导入到MyApplication中时,由于CoolPod的类已经包含在MyFramework的库中(因为CoolPod被embedded),所以我得到了这个冲突(输出上面显示的警告)。

所以我们有这样的结构:

 CoolPod -> MyFramework \ MyApplication CoolPod / 

我如何避免这种冲突?

  • 有没有办法让我的MyApplication提供CoolPod到MyFramework?
  • 我必须通过MyFrameworkpipe道CoolPod的标题?

我曾经想过在MyApplication中包含CoolPod的头文件(但不是它的lib),但是这对于一个简单的例子来说似乎过于复杂。

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

谢谢,

靛青

对于闭源静态库,我们推荐使用cocoapods-packager 。 我不确定它是否支持框架。

我的解决scheme是从cocoa豆得到源代码,并为它创build一个cocoa触摸框架。 然后我把框架链接到我的API和我的testing应用程序。 这不是很好,但我能尽快做到。 我相信Cocoapods正在支持框架,所以这个解决scheme可能会很快过时。

我的公司也使用gradle进行依赖(java)并构build脚本。 所以我创build了groovy / gradle构build任务,构build了我的框架和我的支持框架(cocoapod框架),并从中创build了一个通用框架。 然后它将所有的框架都拉上。 这意味着我可以分发一个邮政编码的所有要求。 这显然不是最好的分发方式(我们将通过Cocoapods来分发依赖closures的源代码框架),但是安装起来很快。

一个解决scheme是打开use_frameworks! 在框架的Podfile中。 然后,您仍然可以编译您的框架,并将您的框架embedded到目标应用程序中。 警告消息将消失(这是因为框架的豆荚被编译到另一个框架,但是您不会将其embedded到目标应用程序中,那么您的应用程序将引用它自己的二进制文件)。

但这不是一个好的解决scheme,原因有两个:1.您需要确保目标应用程序包含框架所需的必需的窗格。 2.应用程序可能会在框架中使用不同的pod版本。 如果框架和应用程序引用相同的pod二进制文件,则可能导致崩溃。

我怀疑这个问题有一个好的解决scheme。

如果您想要一个快速解决scheme – 只需将MyFramework项目作为子项目添加到MyApplication项目。 你仍然可以使用cocoa豆荚为您的框架和testing应用程序(但包括您的“共同”与豆荚只有框架项目的库)