Swift 5.0 开始,实现了 ABI 稳定性,意味着同样的源码,即使是使用不同版本的 Swift 编译, 编译后的程序都可以在 Swift 5 Runime 下运行,而不需要要求目标环境的 Runtime 和开发环境一致。
Swift 5.1 开始,支持了 Module 稳定性。就是说使用 Swift 5.1 编译的二进制库,是具有模块稳定性的,在链接性上可以与其他版本的 Swift 兼容。
默认情况下模块稳定性是关闭的,不同版本的 Swift 编译的库是不能导入项目中直接使用,会报错:
在 framework 项目中打开模块稳定性的方法:
如果在使用 Swift 命令行编译的,编译参数是:-enable-library-evolution
另外,如果在 Swift 的 framework 源码中,使用了桥接头文件混编译 Objective-C 的话,是不能开启模块稳定性的。