iOS开发进阶:Swift 5.0 ABI 稳定

Swift 社区最近的重大新闻 ABI 稳定了。

2019Swift 5.0 带来 ABI 稳定。 下面整理一些关于 ABI 稳定的一些问题。

什么是 ABI?

ABIApplication Binary Interface 的缩写,它是一个规范,通过这个规范,所有独立编译的二进制实体可以被链接在一起并执行。

什么是 ABI 稳定?

ABI 稳定就是二进制接口稳定,就是在运行的时候只要用 Swift 5 或以上的编译器编译出来的 binary, 就可以跑在任意的 Swift 5 或以上的 Runtime 上。 因此,在以后就不用向 App 中放 Swift runtime, 这都将被集成在 iOS/macOS 系统里。

对 App 的影响 ?

  1. App 尺寸会变小。 由于系统中预装了 Swift runtime,不需要额外打包到 APP 包中,会使应用包的尺寸变小。 尺寸变小是相对iOS 12.2或以上预装 Swift runtime 系统来说的,对于 iOS 12.2 以下的系统不会改变。
  2. 程序在新系统上会更省内存。系统集成了 Swift 由于共用一套 runtime,所以应用启动时不需要额外加载 Swift库。

继续使用 Xcode 10.1 不升级有什么影响? 升级 Xcode 10.2 后还能编写 Swift 4.2 的代码吗?

  1. 可以一直使用 Xcode 10.1 里的 Swift 4.2 编辑器,但是不是 ABI 稳定的,必须打包 Swift runtime。在程序运行时系统发现有携带的运行时,就不会使用系统自带的运行时。
  2. 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 稳定会带来什么问题?

  1. 升级问题。 ABI 稳定后运行时作为 iOS 系统的一部分,需要用户升级后才可以使用。比如,iOS 13Swift 6的标准库中添加新的类型,那么在 iOS 12.2 搭载 Swift 5 的系统中就无法始终这个类型。因此,在以后开发中需要考虑兼容问题。
  2. 在新的版本中不再支持将 Swift runtime 打包到应用中。

参考