使用Swift 4.0编译的模块无法在Swift 3.1中导入框架二进制文件

使用Swift 4.0编译的模块无法在Swift 3.1中导入框架二进制文件,swift,xcode,Swift,Xcode,我用xcode 9 swift 3.2版编译了一个框架二进制文件。我还想让它与xcode 8.3.3和swift 3.2语法一起工作。但当我试图运行一个使用xcode 9编译的框架的项目时,我一直在获取Swift 4.0编译的模块无法导入Swift 3.1错误消息。我应该添加哪个选项才能使此工作正常?我知道这是可能的,因为吊舱对讲机在xcode 8.3.3和9下工作。我将非常感谢任何建议由于明显的原因,您不能在使用旧版本Swift的项目中使用使用新版本Swift编译的模块。使用较新的Swift版

我用xcode 9 swift 3.2版编译了一个框架二进制文件。我还想让它与xcode 8.3.3和swift 3.2语法一起工作。但当我试图运行一个使用xcode 9编译的框架的项目时,我一直在获取Swift 4.0编译的模块无法导入Swift 3.1错误消息。我应该添加哪个选项才能使此工作正常?我知道这是可能的,因为吊舱对讲机在xcode 8.3.3和9下工作。我将非常感谢任何建议

由于明显的原因,您不能在使用旧版本Swift的项目中使用使用新版本Swift编译的模块。使用较新的Swift版本编译的框架可能使用较新的Swift语法和/或API,这些语法和/或API仅在较新的Swift版本中可用,因此您将无法从使用较新语法或API的框架中调用任何函数。这一问题是由于Swift尚未稳定ABI。有关此主题的更多信息,请参阅

Swift 3.2只是作为Xcode9的一部分引入的,以使Swift3->4转换更容易。Xcode8.3.3只支持Swift 3.1,而Xcode9只支持Swift 3.2及以上版本,因此您无法编译框架,使其在两个主要的Xcode版本中都可用


如果希望在框架的二进制版本中同时支持Xcode8和Xcode9,则需要提供使用不同Swift编译器版本编译的不同版本。对于使用Cocoapods/Carthage的动态框架,您可以使用条件编译块(如if swift>=3.2)来编写与多个版本的swift编译器兼容的代码。有关更多信息,请参阅。

我想不是因为我的框架不支持3.1和3.2。在xcode 8.3.3项目中,我找不到swift 3.2Ok的项目选项,我明白了,但对讲机解决了这个问题。在Xcode 8和Xcode 9上通过cocoapods安装对讲机,两者都可以工作,并且它们的框架是二进制形式的。