Scheme, Target, Configuration
ビルド時の目的に応じて、設定値や処理を分けたいときに使える機能。
- iOSアプリが通信するバックエンドシステムのURLが環境毎に異なる
- アプリのログ出力を開発フェーズ毎に分けたい(開発時、テスト時、本番リリース時)
それぞれの概念がよくわかっていないので調べて、自分がしっくりくる言葉に落とし込んでみる。
それぞれの関係を表したイメージ図
Schemeとは?
ざっくりいうと、
ビルドを伴う5つの処理(Run, Test, Profile, Analyze Archive)それぞれにおいて、採用する「Target」とTarget内の「Configuration」を紐付けてまとめてラベル付けしたもの
Xcode4から登場した機能である。
Xcode3までは、ビルド・実行に関する大量の設定項目をビルドの目的に応じて設定、切り替えて実施していたが、
目的に応じた設定が異なる箇所は少ない(=ほとんどの部分は共通化できる)じゃんということで生まれた機能らしい。
スキームの設定画面(Product > Scheme > Edit Scheme...)では
「Build」「Run」「Test」「Profile」「Analyze」「Archive」
と並んでいるが、これらは別に上から順に実行されるわけではない。
実際には、ユーザーがどれを実行したいかを選択する(Product > Run/Test/Profile/Analyze/Archive)ことになる。
意味合いは以下の通り。
- Build: ビルド(=ソースコードのコンパイル)。
- Run: Schemeで指定しているTargetをConfigrationの値でビルドし、選択した端末orシミュレータで実行する
- Test: Schemeで指定しているTargetをConfigrationの値でビルドし、ユニットテストを実行する
- Profile: Schemeで指定しているTargetをConfigrationの値でビルドしInstrumentsを使いつつ選択した端末orシミュレータで実行する
- Analyze: Schemeで指定しているTargetをConfigrationの値でビルドし、静的解析を行う
- Archive: Schemeで指定しているTargetをConfigrationの値でビルドし、配布可能な形式のファイル(.ipa)を生成する。
Target
ビルド時の設定リスト。
「Signing & Capabilities」, 「Build Settings」の各設定項目については、デフォルトで「Debug」, 「Release」というConfigurationが用意されており、それぞれの値を設定できる模様。
Targetの単位は、「アプリ自体」「ユニットテスト用アプリ」「UIテスト用アプリ」というふうに大きく設定が異なる場合にTargetを分けるといいらしい。
Configuration
デフォルトではDebugとReleaseが用意されており、同一Target内での設定値の出し分けに使う。
参考
What are “analyze”, “test” and other checkboxes in “Build” part of scheme in Xcode?
All About Schemes
Xcode Profile vs Analyze
What is difference between build and archive in Xcode