【Xcode】ビルドとは?実行(Run)との違いと仕組み
この記事からわかること
- Xcodeのビルド(build)とは?
- 実行(Run)との違いとショートカット
- Xcodeにおけるビルドの仕組み
- ビルドフェーズとは?
- クリーンビルドとは?
index
[open]
\ アプリをリリースしました /
友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-
posted withアプリーチ
Xcodeにおいて基礎的なビルドに関して知識を整理しておきたかったのでまとめていきます。
ビルドとは?
ビルドという単語はXcodeに限った話ではなくソフトウェア開発などにおいて使われる言葉の1つです。英単語としては「建築する」などといった意味を持つ言葉ですがIT用語としては「ソースコードを実行可能な状態に変換する」といった意味をもちます。
そもそもプログラミング言語は人間にとって扱いやすい形の言語であり、機械側からは読み取ることができません。ソフトウェアとして動作させるためにはこれを機械側から読み取れるデータに変換(コンパイル)する作業が必要になります。「コンパイル=ビルド」といわれることもあるので少しニュアンスが掴みやすいかと思います。
正確にはXcodeではこのビルドというフェーズの一部にコンパイルが含まれています。Xcodeのビルドではコンパイルだけでなくリソース(画像、音声ファイル、設定ファイルなど)のコピーやライブラリ、フレームワークのリンクといったプログラムをアプリとして実行可能な状態に変換するために必要な作業をまとめてビルドと呼んでいるようです。
Xcodeにおけるビルド
Xcodeにおいてのビルドは「スキーム(ビルド設定情報コレクション)で指定されたターゲットを実行可能なバイナリファイル(※)へ変換する」役割を持っているようです。
※バイナリファイル:「0」と「1」で表現されたデータ形式で機械側から読み込めるファイル形式
のこと
Xcodeでは常に1つのスキームがアクティブになっており、そのスキーム情報に従い、対象として指定されたターゲットをビルド(またはRun:実行)しています。
ビルドが完了すると「Build Succeeded(=成功)」または「Build Failed(=失敗)」と表示されエラーを吐かずに正常にビルドが完了すればコードに不備がなく、リソースやリンクにも異常のない、「アプリケーションとして動作可能な状態」ということになります。
ここまでのまとめ
- ビルドとはソースコードを実行可能状態にすること
- プログラムにはコンパイルが必要
- Xcodeのビルドはコンパイル+必要な作業
- 必要な作業はリソースのコピーやライブラリなどのリンクなど
- Xcodeでは「コンパイル=ビルド」は少しニュアンスが違うかも?
ビルドフェーズ
Xcodeではターゲットごとに指定されたビルドフェーズでビルド中に実行するべきタスクを管理しています。ターゲットを作成した際には自動でビルドフェーズも構成されますが、ここも開発者が自由に追加することが可能になっています。
Xcodeから「TARGET」>「Build Phases」を選択すると設定されているビルドフェースを確認することができます。
Target Dependencies
ターゲット間の依存関係を設定するためのフェーズ。例えばフレームワーク間の依存関係など
Run Build Tool Plug-ins
ビルドプロセス中に実行する外部ツールを指定するためのフェーズ。
Compile Sources
コンパイルするソースコードを指定するためのフェーズ。
Link Binary With Libraries
アプリケーションに必要なフレームワークやライブラリをリンクするためのフェーズ。
Copy Bundle Resources
アプリケーションバンドルに含まれるリソースファイルをコピーするためのフェーズ。
[CP] Check Pods Manifest.lock:CocoaPods使用時
CocoaPodsが管理するライブラリのバージョンを確認するフェーズ。Manifest.lockは、CocoaPodsが使用するライブラリのバージョンを保持するためのファイル。
[CP] Embed Pods Frameworks:CocoaPods使用時
CocoaPodsが管理するライブラリをアプリケーションに埋め込むためのフェーズ。
ビルドと実行(Run)の違い
Xcodeでアプリを開発していると実行(Run)という言葉も登場します。両者の違いは以下の通りです。
- ビルド:コンパイル+必要な作業
- 実行:ビルド+実機で動作
ビルドはただプログラムを動作可能なファイルに変換するだけであり、実行はビルド後に実際に実行(動作)させます。Macアプリなら開発デバイス、iOSアプリなら接続した実機、もしくは選択したシミュレーターで実行されます。
また「Run」以外にも「Test」「Profile」「Analyze」「Archive」などを行う際にもビルドが行われます。
クリーンビルド
ビルドを行うとDerivedDataと呼ばれるフォルダが生成されます。これは中間データとも呼ばれ、ビルド時に自動で生成される、ログやキャッシュ、インデックスなどが格納されたフォルダのことです。
一度ビルドすると生成され、次回のビルドから時間が短縮されるようになります。しかし容量をそれなりに圧迫するのでストレージ的な観点からや、なんらかの原因でビルドがうまくいかない場合などに削除することもあります。
XcodeではプロジェクトごとにDerivedData内のデータファイルを削除するためのクリーンビルドが用意されています。上部メニューの「Product」>「Clean Build Folder」をクリックすることで実行できます。
ショートカットコマンド
Xcodeのプロジェクト内ではビルドや実行をすぐに行えるようにショートカットコマンドが用意されています。
- ビルド:⌘ + B
- 実行:⌘ + R
- ビルドなし実行:⌘ + Ctrl + R
- クリーンビルド:⌘ + shift + K
「ビルドなし実行」は前回のビルドのまま実行だけをすることができるので時間のかかりがちなビルド時間を短縮することができます。
ビルドが必ず必要な場合はポップアップが表示され、「Build & Run」を促されるので問題ありません。
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。