Swift Digest
Blog | Swift.org Blog

ABI 安定性以後の Apple プラットフォームでの Swift の進化

Evolving Swift On Apple Platforms After ABI Stability

このダイジェストはClaude Opus 4.7 / 4.8によって生成されたものです(License)。原文はこちら

この記事の要点

背景: ランタイムが OS の一部になったことの意味

ABI 安定性は Swift 誕生以来の目標であり、Swift 5.0 で Apple プラットフォーム向けに達成されました。これにより Swift ランタイムと標準ライブラリは OS に同梱され、アプリ側でバンドルする必要がなくなります。ABI 安定性そのものの意味と、モジュール安定性・library evolution との関係は、同時期の「ABI 安定性とその先へ」で整理されています。

この記事が扱うのは、その 結果として生じる開発上のトレードオフ です。ランタイムが OS の一部になったことで、新しい Swift の機能を採用することと、古い OS バージョンとの互換性を保つことの間に、これまで Objective-C で存在したのと同じ緊張関係が生まれました。

どんな機能が新しい OS バージョンを要求しうるのか

新しい Swift ランタイムや標準ライブラリのサポートを必要とする機能は、OS の利用可能性(availability)による制限の対象になりえます。具体的には次のようなものです。

Core Team は今後、レビューに入る各 Proposal について後方互換性への影響を検討していくとされています。

既存アプリと言語互換モードへの影響

記事は当時の典型的な疑問に Q&A 形式で答えています。要点は次のとおりです。

言語互換モードは ABI に影響しない

言語の互換性設定(-swift-version 4 / 4.2 など)は 純粋にコンパイル時の機能 で、ソース互換性を制御するものです。ABI には影響しません。安定 ABI を使うために Swift 4 のコードを Swift 5 モードへ移行する必要はありませんし、今後もランタイム新機能を使わない限り、新しい言語モードの採用が新しい OS 要件を課すことはありません。

既存の Swift アプリの再コンパイルは不要

ランタイムを同梱した既存の Swift バイナリは、macOS 10.14.4 / iOS 12.2 / tvOS 12.2 / watchOS 5.2 とそれ以降の OS でも、同梱したランタイムを使って動き続けます。これらの古いランタイムは安定 ABI とは互換性がないため、OS 側のランタイムとは互いに無関係に振る舞います(互いに相手の Swift クラスを素の Objective-C クラスとして見ます)。ただし、同梱ランタイムを使うアプリは App Store の app thinning の恩恵を受けられません。

古い OS へのデプロイ

Swift 5 でビルドしても、アプリの最小デプロイターゲットを引き上げる必要はありません。古い OS へデプロイするアプリには Swift ランタイムのコピーが埋め込まれますが、ランタイムを同梱する OS 上ではそのコピーは無視され(事実上不活性になり)ます。

新しいランタイムを自分で同梱できないのはなぜか

「OS を待たずに新しいランタイム機能を使うため、新しい Swift ランタイムを自分のアプリにバンドルする」ことは、いくつかの理由でできません。

新機能を古い OS へバックデプロイできるか

一部のランタイム機能については、たとえばアプリに「shim」ランタイムライブラリを埋め込むといった手法でバックデプロイできる可能性があります。ただし常に可能とは限りません。バックデプロイの成否は、古い OS に出荷済みのバイナリ成果物が持つ制約や既存のバグによって根本的に制限されます。Core Team は今後、レビュー中の各 Proposal についてバックデプロイへの影響を個別に検討していくとされています。

まとめ

Swift 5 の ABI 安定性は、ダウンロードサイズの削減・OS との統合・将来の Swift 製フレームワークといった大きな利点をもたらしました。その代償として、Swift ランタイムが OS の一部になったため、ランタイムや標準ライブラリの新機能を使うには新しい OS を要求しうる、というトレードオフが生まれます。これは Objective-C で長く存在してきたものと同じ性質のもので、既存アプリや言語互換モードには影響しません。今後 Proposal をレビューする際には、後方互換性やバックデプロイへの影響が個別に考慮されていきます。

関連リンク