Xcodeで設定するビルド設定はプロジェクトファイル(*.xcodeproj
)に保存されます。通常のアプリ開発ではこれだけで十分なのですが、中規模以上の開発を行っているときや特殊なプログラムを作っているときなどは、もう少し柔軟に制御したいことがあります。
たとえば、次のようなときです。
- 複数のプロジェクト間で共通のマクロ定義を使用したい。
- ビルドマシンによってヘッダーファイルやライブラリの参照パスを変更したい。
- コードサイニングに関する設定をプロジェクトファイルに保存したくない。
- Xcodeを使わずに、ビルド設定を変更したい。
Xcodeでは設定値を設定ファイルに書き、設定ファイルから設定値を読み込ませてビルドできます。この記事ではXcodeのビルド設定ファイルの作成方法について解説します。
ビルド設定ファイルの作成方法
ビルド設定ファイルはテキストファイルです。テキストエディターでも作成できますが、プロジェクトに設定する必要があるのでXcode上で作成します。次のように操作します。
ビルド設定ファイルは特定のターゲット用の設定であっても、ターゲットの対象にはしません。
ビルド設定ファイルの構文
ビルド設定ファイルの構文はとてもシンプルです。行単位で設定を列挙していくだけです。
設定 = 設定値
たとえば、ONLY_ACTIVE_ARCH
という設定をYES
にするには、次のように書きます。
ONLY_ACTIVE_ARCH = YES
コメント
Swiftのコードと同じように//
以降は行末までがコメントとして扱われます。
設定値の種類
設定によって値のタイプが異なります。Xcode上でビルド設定を見ても、文字列だったり、数値だったりします。それに対応し、次のようなタイプが定義されています。
- Boolean (
YES
またはNO
) - 文字列
- 列挙(定義済みのテキスト)
- スペース区切りの文字列リスト。文字列内にスペースがあるときは
'
で囲む - パス。POSIX形式のファイルパス・ディレクトリパス
- スペース区切りのパスリスト。スペースが含まれるときは
'
で囲む
値の参照
他の設定値を参照するときは次のように書きます。
$(他の設定)
値の継承
ターゲット単位の設定は指定しなければ、プロジェクト単位の設定が使われます。プロジェクト単位の設定も定義されていなければ、デフォルト値が使われるというように、継承された値が使われる場合があります。設定値に以下のように書くと継承された値が使われます。
$(inherited)
文字列リストやパスリストなど、複数の値を使用可能な設定に対しては、$(inherited)
を使って継承された値に追加することもできます。
FLAGS = $(inherited) --no-timestamp
プラットフォーム別の設定
プラットフォーム別の設定を定義するときは、設定名に[プラットフォームの指定=値]
の形式で指定します。定義されているのは次の2つです。
sdk
:macos10.12
やiphoneos10.2
などの、クロスプラットフォームSDKを指定する。バージョン番号は*
を使って任意の値にヒットさせることも可能である。arch
:x86_64
またはarm64
両方とも指定したいときは、設定名[sdk=macos10.12][arch=x86_64] = 値
のように、2つとも書きます。
他の設定ファイルを読み込む
他の設定ファイルに書かれている設定を読み込みたいときは、次のように書きます。
#include "Common.xcconfig"
この場合はCommon.xcconfig
ファイルが読み込まれる。読み込むファイルがないときは警告が表示されます。しかし、#include?
を使うと表示されません。
#include? "Option.xcconfig"
ビルド設定ファイルとターゲットの関連付け
ビルド設定ファイルを使用するには、どのファイルを使用するのかをXcodeで設定します。次のように操作します。
たとえば、Debug
時のプロジェクトの設定にDebug.xcconfig
ファイルを割り当てる場合は、Debug
内のプロジェクトの行のNone
をクリックし、Debug
を選択する。
設定可能な値
設定可能な値の一覧は、Apple デベロッパーサイトのドキュメントで公開されています。