无法使用Xcode 10.2中的Cocoapods分解超类

JoG*_*oFo 12 xcode ios cocoapods swift

移至Xcode 10.2后,在运行我的应用程序时出现错误崩溃failed to demangle superclass of MyClass from mangled name MySuperClass

当我尝试创建MyClass实例时发生崩溃。我正在使用CocoaPods 1.6.1,但尚未升级到Swift5。有问题的类在Pod内定义,并且是定义其他Pod的类的子类(列为第一个Pod的子依赖项)。

增加了复杂性(不确定是否相关)的是,超类采用了泛型,而子类定义了具体类型,而不采用了泛型。即

// Inside Pod B:
open class MySuperClass<DataType: Decodable> { ... }

// Inside Pod A:
open class MySubClass: MySuperClass<AConcreteStructConformingToCodable> { ... }

// Inside my project:
let myClass = MySubClass()
Run Code Online (Sandbox Code Playgroud)

我尝试覆盖Pod构建设置,以在不进行任何优化的情况下进行行为优化而无需进行优化。

JoG*_*oFo 8

我在Xcode 10.2发行说明的 “快速编译器”->“已知问题”下发现了这一点:

链接到静态Swift库可能会创建缺少类型元数据的二进制文件,因为在静态档案内部定义元数据的目标文件被误认为未使用。(47598583)

这可能表现为Swift运行时错误,并显示以下消息:“未能从错误的名称”分解MyClass的超类”。

解决方法:如果可以重建静态库,请尝试在启用整个模块优化的情况下进行构建。否则,将-all_load添加到客户端二进制文件中的链接器标志中,以确保将所有目标文件链接到其中。

通过添加-all_load到主项目的其他链接器标记,我能够解决此问题:

-all_load链接器标志

希望这对别人有帮助!

  • 只是对其他人的提醒,-all_load并不能解决我的问题。而且我已经对静态库进行了整个模块的优化。 (4认同)