Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
6
Help us understand the problem. What is going on with this article?
@am10

Xcode11 ABI安定化につまずいた

More than 1 year has passed since last update.

はじめに

みなさん待望の 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:

参考

6
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
am10
engineerlife
技術力をベースに人生を謳歌する人たちのコミュニティです。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
6
Help us understand the problem. What is going on with this article?