LoginSignup
6

More than 3 years have passed since last update.

posted at

updated at

Xcode11 ABI安定化につまずいた

はじめに

みなさん待望の ABI 安定化が Swift5 でついに達成されました:tada:

ついに ABI 安定化がきたか!(ABI 安定化ってなんだ?:speak_no_evil:

ABI 安定化については下記参考

ほーん:thinking:つまり Swift のバージョンが異なるバイナリ同士をリンクできるようになったてことか:exclamation:

Module Stability

異なるバージョンでいけるってことはこの Carthage でライブラリを導入したやつ(Xcode11.0 Swift5.1)は Xcode11.3 Swift5.1.3 でビルドできるってことか:exclamation:

error1

なんやて:interrobang:

結局ターミナルでもう一度下記コマンドしないとむりでした...

carthage update --platform iOS

なんでや?と思っていたらピンポイントの質問を発見:heart_eyes:

そのライブラリのビルド設定において、Module Stabilityが有効になっていないからです。

(中略)

つまり、Swift 5.0ではABI Stabilityによって異なるバージョンのコンパイラが生成したライブラリをリンクできますが、インポートできないので実質的にサードパーティのライブラリに対してはABI Stabilityの恩恵を受けることはできません。
(インポートの段階で失敗するのでリンクの段階まで到達しないため)

そういうことらしい:open_mouth:

どうやらライブラリの互換を達成するには *.swiftinterface ファイルが必要でライブラリ側の設定で BUILD_LIBRARY_FOR_DISTRIBUTION というフラグを YES にする必要があるらしい。

ほーん...まじかそんなんやってねぇ:scream:全部やってねぇ...)

setting

ここを YES にして carthage update したらとりあえず framework の Modules に *.swiftinterface ファイルができました:clap:

ビルド!!!

error2

:poop::poop::poop:

...よくわかりませんが Xcode11.0, 11.1 <-> Xcode11.2.1, 11.3 は無理でした:scream_cat:

結果
Xcode11.0 (Swift5.1) Xcode11.1 (Swift5.1) :o:
Xcode11.0 (Swift5.1) Xcode11.2.1 (Swift5.1.2) :x:
Xcode11.0 (Swift5.1) Xcode11.3 (Swift5.1.3) :x:
Xcode11.1 (Swift5.1) Xcode11.0 (Swift5.1) :o:
Xcode11.1 (Swift5.1) Xcode11.2.1 (Swift5.1.2) :x:
Xcode11.1 (Swift5.1) Xcode11.3 (Swift5.1.3) :x:
Xcode11.2.1 (Swift5.1.2) Xcode11.0 (Swift5.1) :x:
Xcode11.2.1 (Swift5.1.2) Xcode11.1 (Swift5.1) :x:
Xcode11.2.1 (Swift5.1.2) Xcode11.3 (Swift5.1.3) :o:
Xcode11.3 (Swift5.1.3) Xcode11.0 (Swift5.1) :x:
Xcode11.3 (Swift5.1.3) Xcode11.1 (Swift5.1) :x:
Xcode11.3 (Swift5.1.3) Xcode11.2.1 (Swift5.1.2) :o:

でも、Xcode11.2.1(Swift5.1.2) <-> Xcode11.3(Swift5.1.3) はビルドできたので互換性はあるみたいです。

ということでライブラリを作成する際は BUILD_LIBRARY_FOR_DISTRIBUTIONYES に設定しましょう!!

※Swift のバージョンについて
ターミナルで下記コマンドで調べました

swift -version
Xcode Swift
11.0 5.1 (swiftlang-1100.0.270.13 clang-1100.0.33.7)
11.1 5.1 (swiftlang-1100.0.270.13 clang-1100.0.33.7)
11.2.1 5.1.2 (swiftlang-1100.0.278 clang-1100.0.33.9)
11.3 5.1.3 (swiftlang-1100.0.282.1 clang-1100.0.33.15)

さいごに

早くライブラリ全部 BUILD_LIBRARY_FOR_DISTRIBUTIONYES に設定しなきゃ:speak_no_evil:

[iOSDC Japan 2019 リポート]「ライブラリのインポートとリンクの仕組み完全解説」というセッションを聞いてきましたこの記事とスライドもみなきゃ:laughing:(なんかわかった気になります:neutral_face:

参考

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
6