Swift Cocoapods 框架中的扩展导致无法识别的选择器发送到 Class

Swift extension in Cocoapods Framework causing Unrecognised Selector sent to Class

我有一个 Swift 框架,它通过 Cocoapods 管理并包含如下扩展:

public extension UIImage {
    public static func maskedImageWithColor( color: UIColor, forImageNamed image: UIImage) {
        // Implementation
    }
}

当我在主应用程序的 Objective C 中写入它时,我没有收到任何编译器错误或警告。

// No problems here!
[UIImage maskedImageWithColor:UIColor.blackColor() forImageNamed:@"myImage"]; 

然而,当我 运行 应用程序时,它会在一堆 'Unrecognised Selector' 错误中爆炸。

奇怪的是,当框架包含在项目中并直接添加到构建阶段的相关部分(即不由 Cocoapods 管理)时,它的工作原理如下预期。

框架的其他方面——类、枚举等——也都工作正常,它似乎只是扩展,而且只有当它们在 Cocoapods 管理的框架中时。

关于我在这里可能遗漏的内容有什么想法吗?

这是因为默认情况下链接器不会从静态库中加载类别方法。如果您要使用静态库添加类别方法(swift 中的扩展),请将 -ObjC 添加到目标构建设置中的其他链接器标志。

阅读更多here