繁体   English   中英

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

[英]Module compiled with Swift 4.0 cannot be imported in Swift 3.1 for framework binary

我用xcode 9(swift 3.2版)编译了一个框架二进制文件。 而且我还想使其与带有快速3.2语法的xcode 8.3.3一起使用。 但是,当我尝试使用通过xcode 9编译的框架运行项目时,我一直在Module compiled with Swift 4.0 cannot be imported in Swift 3.1错误消息中Module compiled with Swift 4.0 cannot be imported in Swift 3.1我应该添加哪个选项才能使此工作正常进行? 我知道这是可能的,因为pod Intercom在xcode 8.3.3和9下都可以工作。

出于明显的原因,您不能在使用旧版Swift的项目中使用使用新版Swift编译的模块。 使用较新的Swift版本编译的框架可能正在使用较新的Swift语法和/或API,这些语法和/或API仅在较新的Swift版本中可用,因此您将无法从使用较新的语法或API的框架中调用任何函数。 此问题是由于Swift尚未在ABI上稳定而引起的。 有关该主题的更多信息,请参见《 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编译器版本兼容的代码。 有关更多信息,请参见Swift编程语言(Swift 4)-版本兼容性

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM