Swift 5 ABI Stability

Learn why ABI Stability is important?

Introduction:

ABI stability enables OS vendors to embed a Swift Standard Library and runtime in the OS that is compatible with applications built with Swift 5 or later.

What is ABI?

ABI stands for Application Binary Interface. At runtime, Swift program binaries interact with other libraries through an ABI. It defines many low level details for binary entities like how to call functions, how their data is represented in memory, where metadata is and how to access it.

What is ABI Stability?

ABI stability means locking down the ABI to the point that future compiler versions can produce binaries conforming to the stable ABI. It enables binary compatibility between applications and libraries compiled with different Swift versions.

Currently Swift is not ABI stable, so each binary bundles its own version of the Swift Dynamic Library. If you open an .ipa you can find swift standard libraries (.dylib) in SwiftSupport or Frameworks.

Suppose Apple music is using Swift 3.2, so it bundles Swift 3.1 Dynamic Library inside but the Notes app is using Swift 4.0, so it bundles Swift 4.0 and it’s 4.0 ABI.

If Swift becomes ABI Stable, Swift will be embeded within the iOS Operating System and it’s ABI will be compatible with every version of Swift. i.e Apple Music is using Swift 5.0, but Notes app is using Swift 5.2, and both are consuming Swift ABI embedded in the Operating System.

Why does ABI Stability matter?

  • Reduced Bundle size: Size of your application will decrease because you will no longer have to include the Swift standard library in your Frameworks folder.
  • Source compatibility: Newer compilers can compile code written in an older version of Swift. This aims to reduce the migration pain that Swift developers face when migrating to a newer Swift version.
  • Less frequent language changes: Less changes leads to less efforts in migration.
  • Binary framework & runtime compatibility: It enables the distribution of frameworks in a binary form that works across multiple Swift versions. Binary framework include both swift module file and shared library. Module format stability stabilizes the module file, which is the compiler’s representation of the public interfaces of a framework. Module format stability will take time to exist (May not make it in time). Developers can create Pre-compiled Frameworks in Swift because they don’t need to bundle the Swift standard library into their framework.

References:

You can always reach me on: Linkedin or Twitter