objective-c - 具有相同符号的两个框架

标签 objective-c ios xcode frameworks duplicates

我在Xcode项目中有两个框架,它们都定义了一个同名类(B.framework和C.framework都有一个名为MyClass的类),从而产生了如下警告:

Duplicate symbol _OBJC_METACLASS_$_MyClass originally in B.framework/B(MyClass.o) now lazily loaded from C.framework/C(MyClass.o)
Duplicate symbol _OBJC_CLASS_$_MyClass originally in B.framework/B(MyClass.o) now lazily loaded from C.framework/C(MyClass.o)

然后,在运行时仅加载其中一个实现,而尝试使用另一个实现将导致“无法识别的选择器发送到实例”,因为它们是完全不同的类(即使它们具有相同的名称)。

我直接在代码中使用了MyClass实现中的一个,但是另一个框架仅在内部使用其MyClass,我不知道为什么还要导出它(它甚至没有在框架头文件中提到,我使用nm查看符号)。

如何使两个框架都能工作?

最佳答案

Obj-C中没有“导出”类之类的东西。确切地说,没有“非导出”类之类的东西。正是这个问题正因为如此,强烈建议对所有Obj-C代码在类上使用2或3个字母的前缀。您唯一的解决方案(除了不使用这些框架外)是编辑一个(或两个)框架以更改类名,或者,如果您无权访问源代码,则需要联系供应商并要求他们做出改变。

关于objective-c - 具有相同符号的两个框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8827348/

相关文章:

iphone - 如何在Xcode 4中创建项目模板

Objective-C:检查类类型,最好使用 isKindOfClass 或 respondsToSelector?

iphone - CAScrollLayer 不滚动!

iphone - 在 iPhone 中显示来自 UIDatePicker 的工作日

ios - 在基本本地化中找不到 main.storyboard 字符串

xcode - TestFlight 和发布运行崩溃?

ios - Xcode 10.2 : Internal error when debugging app

objective-c - 扩展 UITableView 的单元格

ios - RestKit - 从 RKRequestDescriptor 中排除具有 nil 值的属性映射

ios - 我怎样才能改变ios sdk?