iOS开发进阶:Swift 5.0 ABI 稳定

iOS开发进阶:Swift 5.0 ABI 稳定
镇长Swift 社区最近的重大新闻 ABI 稳定了。
2019 年 Swift 5.0 带来 ABI 稳定。 下面整理一些关于 ABI 稳定的一些问题。
什么是 ABI?
ABI 是 Application Binary Interface 的缩写,它是一个规范,通过这个规范,所有独立编译的二进制实体可以被链接在一起并执行。
什么是 ABI 稳定?
ABI 稳定就是二进制接口稳定,就是在运行的时候只要用 Swift 5 或以上的编译器编译出来的 binary, 就可以跑在任意的 Swift 5 或以上的 Runtime 上。 因此,在以后就不用向 App 中放 Swift runtime, 这都将被集成在 iOS/macOS 系统里。
对 App 的影响 ?
App尺寸会变小。 由于系统中预装了Swift runtime,不需要额外打包到APP包中,会使应用包的尺寸变小。 尺寸变小是相对iOS 12.2或以上预装Swift runtime系统来说的,对于iOS 12.2以下的系统不会改变。- 程序在新系统上会更省内存。系统集成了
Swift由于共用一套runtime,所以应用启动时不需要额外加载Swift库。
继续使用 Xcode 10.1 不升级有什么影响? 升级 Xcode 10.2 后还能编写 Swift 4.2 的代码吗?
- 可以一直使用
Xcode 10.1里的Swift 4.2编辑器,但是不是ABI稳定的,必须打包Swift runtime。在程序运行时系统发现有携带的运行时,就不会使用系统自带的运行时。 Xcode 10.2对应的编译器版本是Swift 5.0, 语法兼容版本Swift 5.0, Swift 4.2, Swift 4.0,可以在不修改的情况下编译Swift 4.2的代码。由于编译版本是Swift 5.0,所以得到的二进制依然是ABI稳定的。ABI与语言无关,和编译器的版本或者说Xcode版本有关。
ABI 稳定会带来什么问题?
- 升级问题。
ABI稳定后运行时作为iOS系统的一部分,需要用户升级后才可以使用。比如,iOS 13的Swift 6的标准库中添加新的类型,那么在iOS 12.2搭载Swift 5的系统中就无法始终这个类型。因此,在以后开发中需要考虑兼容问题。 - 在新的版本中不再支持将
Swift runtime打包到应用中。













