iOS 框架中的重复符号

Duplicate symbols in iOS frameworks

我必须在我的应用程序中使用第 3 方框架。但是当我在我的项目中包含该框架时,我收到如下链接器错误:

duplicate symbol _SRHTTPResponseErrorKey in:
    Shared/Libraries/XXX.framework/XXXSDK(SRWebSocket.o)
    Shared/Libraries/YYY.framework/YYYSDK(YYYSRWebSocket.o)

有没有办法在不改变框架的情况下解决此类错误?

问题在于框架和您的代码(或您的另一个框架)包含相同的 classes/frameworks。该框架的开发人员认为,让自己的框架成为另一个框架的保护伞是个好主意——事实并非如此。一个框架不应该包含另一个框架。

顺便说一句:这就是为什么每个 class 的 ObjectiveC 框架都应该有一个前缀的原因。它降低了发生冲突的可能性。

为您提供以下解决方案:

  1. 如果您添加两个相互冲突的 class 之一:在您的代码中重命名 class。也许分叉框架并更改所有 classes 的前缀或使用 3) 中的技术创建包装器框架。

  2. 要求开发人员删除所有外部代码并且 link 只删除它。此外,he/she 必须记录依赖关系,以便框架的用户知道必须在哪个版本中添加哪个依赖关系 he/she。您可以使用 CocoaPods/Carthage 之类的依赖框架或 makefile 来获取依赖框架。

  3. 如果 2) 不可能,因为框架将被其他客户使用并且开发人员不想破坏他们的代码(顺便说一句,愚蠢的原因):要求框架的开发人员为每个不是他自己的代码的 class 添加一个 "Other C Flag" 就像描述的 here