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
打包到应用中。