Swift 3.1.1编译错误:未知密钥' SwiftImportAsNonGeneric'

时间:2017-10-19 15:38:18

标签: swift xcode9

升级到Xcode 9后的一段时间,我发现我无法再使用Swift 3.1.1快照构建基于Kitura的项目(我已经通过swiftenv安装了该项目。)

当我运行swift build时,我会得到一些构建时间:

/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.13.sdk/System/Library/Frameworks/Foundation.framework/Headers/Foundation.apinotes:8:28: error: unknown key 'SwiftImportAsNonGeneric'
  SwiftImportAsNonGeneric: true
                           ^
<unknown>:0: error: could not build Objective-C module 'Foundation'

似乎Swift和Xcode之间存在依赖关系,而Xcode 9不再与Swift 3.1.1(或更早版本)快照完全兼容。我相信这可能是因为我的项目使用了Foundation,而Mac上的Foundation是作为Xcode的一部分提供的,而在Linux上它是Swift快照的一部分(通过swift-corelibs-foundation)。

1 个答案:

答案 0 :(得分:0)

我找到了解决这个问题的 解决方案:如果我保留了Xcode 8.3.3的副本(例如在/Applications/Xcode8.3.3.app中),那么我可以使用sudo xcode-select -s /Applications/Xcode<version>.app/Contents/Developer来在使用SPM构建之前选择合适的一个,然后我可以在同一系统上构建Swift 3.1.1和4.0项目。

然而,这感觉有点笨重。每次我使用&#39;其他&#39; Swift版本,我必须确保运行xcode-select,否则构建将失败。在这种情况下,有多个版本的Xcode是正确的解决方案,还是我错过了使用Xcode 9的技巧?