Swift Framework不包含从泛型结构扩展的符号

dre*_*wag 16 generics linker frameworks ios swift

我无法将我的框架与利用该框架的代码链接起来.具体来说,链接器无法找到泛型结构的扩展符号.

这是Optional的扩展之一:

extension Optional {
    /// Unwrap the value returning 'defaultValue' if the value is currently nil
    func or(defaultValue: T) -> T {
        switch(self) {
            case .None:
                return defaultValue
            case .Some(let value):
                return value
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

如果代码是在应用程序的主要部分中编译的,则此方法在游乐场或应用程序中运行良好.但是,当我尝试将其编译为Framework时,apps(甚至是框架的测试)会产生以下链接器错误:

体系结构i386的未定义符号:"__TFSq2orU__fGSqQ__FQQ",引自:__TFC18SwiftPlusPlusTests27Optional_SwiftPlusPlusTests13testOrWithNilfS0_FT_T_ in Optional + SwiftPlusPlusTests.o

类似的方法,如下面的一个,链接罚款(注意,它不是通用的)

extension String {
    /// Returns a string by repeating it 'times' times
    func repeat(times: Int) -> String {
        var result = ""
        for i in 0..times {
            result += self
        }
        return result
    }
}
Run Code Online (Sandbox Code Playgroud)

我的存储库中有两个其他扩展在github上:SwiftPlusPlus也没有链接(两者都在通用的strucs上).如果您提取最新提交,构建框架,然后尝试运行单元测试,您将重现错误.

到目前为止,我已经尝试在输出的框架和中间文件上运行"字符串",我没有看到这些扩展的符号,但我确实看到了repeat方法扩展的符号String.所以它似乎甚至没有将它们编译到库中.

有谁知道为什么框架中没有定义符号?

编辑

  • 是我的可选扩展的链接
  • 以下是测试文件的链接,该文件在尝试编译测试目标时导致链接器错误

dre*_*wag 9

发布在Apple开发者论坛上 ,一位Apple员工回复说这是一个已知的bug.

当它们生活在不同的框架中时,编译器看起来像通用扩展中的方法的错位符号名称是错误的.