強火で進め

このブログではプログラム関連の記事を中心に書いてます。

xcconfigファイルでビルド設定を外部ファイル化

twitterでxcconfigファイルという便利なファイルが有る事を教えて貰いました。

この便利なファイルを使ってビルド設定を外部ファイル化する方法を紹介。

xcconfigファイル の作成と設定

まずは xcconfigファイル の作成。

こちらは「新規ファイル作成」をしたときの「Other」に有る「Configuration Setting File」がそのファイルとなります。

取り敢えずここを選択して DebugSetting.xcconfig という名称でファイルを作成します。

次にビルドの設定を開き、「構成」を「Debug」にし、「ベース」に先程作成したファイルを選択します。

こんな感じに変更。

これでDebugビルド時にこのファイルに書かれている設定が反映される様になります。

動作検証

このファイルの設定が反映されているかプリプロセッサマクロの定義を使って動作検証しまてみます。

設定はそれぞれ以下の様にしました。

【Debugビルド】
DebugSetting.xcconfig を作成し、「ベース」に選択。ファイルには以下の内容を記述

GCC_PREPROCESSOR_DEFINITIONS = DEBUG=1

【Releaseビルド】
ReleaseSetting.xcconfig を作成し、「ベース」に選択。ファイルには以下の内容を記述

GCC_PREPROCESSOR_DEFINITIONS = RELEASE=1

プログラム本体には以下の内容を書いて検証してみました。

#if DEBUG
	NSLog(@"DEBUG定義されてるよ");
#else
	NSLog(@"DEBUG定義されて無いよ");
#endif
#if RELEASE
	NSLog(@"RELEASE定義されてるよ");
#else
	NSLog(@"RELEASE定義されて無いよ");
#endif

実行した結果はこちら
【Debugビルド時】

2010-10-03 01:12:50.783 Test[20670:207] DEBUG定義されてるよ
2010-10-03 01:12:50.785 Test[20670:207] RELEASE定義されて無いよ

【Releaseビルド時】

2010-10-03 01:13:17.369 Test[20726:207] DEBUG定義されて無いよ
2010-10-03 01:13:17.372 Test[20726:207] RELEASE定義されてるよ

ちゃんとそれぞれのファイルの内容が反映されているのが確認出来ました。

次に xcconfigファイル で定義したものをビルド設定の方でも定義したらどうなるのかを検証しました。

  • xcconfigファイル → DEBUG=1
  • ビルド設定 → DEBUG=2

こんなプログラムで検証しました。

#if DEBUG == 1
	NSLog(@"DEBUG==1 だよ");
#elif DEBUG == 2
	NSLog(@"DEBUG==2 だよ");
#else
	NSLog(@"DEBUG定義されて無いよ");
#endif

実行結果。

2010-10-03 01:29:40.536 Test[20857:207] DEBUG==2 だよ

結果はビルド設定の方が優先。 xcconfigファイル を「ベース」って所に設定したのでそうだろうとは思ってましたが予想通りした。

このファイルによく使うライブラリのヘッダやライブラリのディレクトリを「ヘッダ検索パス」「ライブラリ検索パス」に設定しておけば新しいプロジェクトを作成した時にファイルをプロジェクトにコピーするだけで設定が済んでしまいますね。

設定する項目の定義名については例えば、「ヘッダ検索パス」を設定したい場合はこの様に該当の行を選択した状態で command+c でコピーし、それを xcconfigファイル にペーストして使うのが一番簡単で良いでしょう。

コピーした結果はこちら

HEADER_SEARCH_PATHS = 

毎回、新しいプロジェクトファイルを作成したときに追加してるビルド設定などをこのファイルに記述しておけばかなり最初の手間が省けるのではないでしょうか?