Swiftのインクリメンタルビルドはどのように動作しているのか
(medium.com)以下のように要約できます。
-
Xcode 10以降、llbuildベースでファイル単位のインクリメンタルビルドが動作する。
-
Xcodeのビルドログ上では違いがないように見えるが、依存関係を分析し、インターフェースのハッシュ値を比較し、オブジェクトの
.oファイルを生成する。もちろん実装部が変われば再生成する。 -
依存関係を持つ別のソースファイルに対するインターフェースのハッシュ値が同一であれば、オブジェクトファイルは生成しない。
-
Swiftファイルの依存関係情報は
.swiftdepsファイルで確認できる。 -
ファイル単位で
swiftmoduleの一部分である partial を作成しておき、リンク時にモジュール全体を結合する。 -
JavaのGradleビルドのように、ISPで分けたからといってインターフェースごとに分離され、変更のあるファイルだけがビルドされるわけではない。
-
Swiftソースファイルをコンパイルするときは、実装部が変わったファイルは再コンパイルするが、宣言部を中心に依存関係を把握するため、宣言が変わったファイルに依存する場合にのみ再ビルドする。
まだコメントはありません。