我必须在我的应用中使用第三方框架。但是当我在我的项目中包含框架时,我会遇到如下链接器错误:
duplicate symbol _SRHTTPResponseErrorKey in:
Shared/Libraries/XXX.framework/XXXSDK(SRWebSocket.o)
Shared/Libraries/YYY.framework/YYYSDK(YYYSRWebSocket.o)
有没有办法在不改变框架的情况下解决这些错误?
答案 0 :(得分:2)
问题是框架和您的代码(或您的其他框架)包含相同的类/框架。该框架的开发人员认为,使其自己的框架成为另一个框架的保护伞是一个好主意 - 事实并非如此。框架永远不应该包含另一个框架。
顺便说一句:这就是为什么你的ObjectiveC框架的每个类都应该有一个前缀的原因。它降低了冲突的可能性。
有以下解决方案:
如果您添加两个冲突类中的一个:在代码中重命名该类。也许分叉框架并更改所有类的前缀或使用3)中的技术创建包装框架。
要求开发人员删除所有外部代码并仅将其链接。此外,他/她必须记录依赖性,以便框架的用户知道他/她必须添加哪个版本。你可以使用像CocoaPods / Carthage或makefile这样的依赖框架来获取依赖框架。
如果2)是不可能的,因为该框架将被其他客户使用并且开发人员不会破坏他们的代码(顺便说一下愚蠢的理由):要求框架的开发人员为每个类添加这不是他自己的代码,如“{3}}