Xcode Build System
New Build System vs Legacy Build System
Xcode 10 から導入されたのが、New Build System。
The new build system provides improved reliability and build performance, and it catches project configuration problems that the legacy build system does not.
https://developer.apple.com/documentation/xcode_release_notes/xcode_10_release_notes/build_system_release_notes_for_xcode_10
https://www.ralfebert.de/ios/blog/cocoapods-clean-input-output-files/
Xcode の Build System 設定について。
Workspace Settings... から設定できる。
概要
言語処理系 とは、任意のプログラミング言語で記述されたプログラムから実行可能なプログラムを生成するためのプログラムの集合であり、Xcode Build System も言語処理系の一種であると考えられる。
Xcode Build System は、Swift や Objective-C 等のソース言語を最終的に実行可能な形式に変換する (= ビルドする) ためのプログラムの集合であり、言語処理系 の一種だと考えられる。複数のツール間での値の受け渡しや、その実行順序などを制御する。
言語処理系 のステップは主に、以下の5ステップに大別できる。
プリプロセッサ
コンパイラ
アセンブラ
リンカー
ローダー
プリプロセッサ
プリプロセッサ は、プログラムをコンパイラが解釈できるように書き換えを行う。例えば、マクロを展開したり、プリプロセッサディレクティブに基づいてコードを置き換えたりする。
code:.c
// マクロ定義
#define BUFFER_SIZE 1024
// マクロを利用したコード
foo = (char *) malloc (BUFFER_SIZE);
// プリプロセッサにより、コンパイル時には以下のようなソースがわたる
foo = (char *) malloc (1024);
ただし、Swift コンパイラには プリプロセッサ が存在しないため、マクロ が利用できない。その代わりに、Xcode のビルド設定内の Active Compilation Conditions にて前処理を挟むことができる。
Xcodeは依存関係の解決に swift-llbuild という低レベルなビルドシステムを利用している。
コンパイラ
Xcode では、Swift のコンパイルには swiftc、Objective-C をはじめとした C言語ファミリーのコンパイルには clang を利用する。コンパイラにはフロントエンドとバックエンドがある。
フロントエンドは、ソースプログラムから AST を生成し、さらに 中間表現 に変換する。同時に、ソースプログラムの情報を集約した 記号表 も管理する。swiftc の場合、中間表現は特に SIL (Swift Intermediate Language) と呼ばれる。SIL はさらなる分析や最適化のために利用されるものであり、直接マシンコードを生成することはできず、その前に LLVM IR という中間表現にさらに変換される。バックエンドでは、この中間表現をアセンブリコードに変換する。
アセンブラ
アセンブラは、アセンブリコードをマシンコードに変換する。Xcode の場合には Mach-O ファイルを生成する。
リンカー
アセンブラ によって生成されたオブジェクトファイルや、種々のライブラリ (.dylib, .tbd, .a) をマージするプログラム。
ローダー
OS の一部であり、プログラムをメモリにロードして実行する。
Build Setting
Build Setting を閲覧する
xcodebuild の -showBuildSettings で閲覧できる。
https://stackoverflow.com/questions/6910901/how-do-i-print-a-list-of-build-settings-in-xcode-project/12823466#12823466
https://developer.apple.com/library/archive/documentation/DeveloperTools/Reference/XcodeBuildSettingRef/1-Build_Setting_Reference/build_setting_ref.html
DEBUG
Swift の場合
https://qiita.com/qmihara/items/a6b88b74fe64e1e05ca4
参考
https://www.vadimbulavin.com/xcode-build-system/