なぜこの記事を書いたか?
XcodeのBuild Settingsメニューで設定する問題点
アプリの様々な設定を主に行うBuild Settingsですが、XcodeのUI的にいくつか問題があります
- diffが見づらい(debugの設定なのかreleaseなのか読み取れない)
- テキストファイルのような柔軟な変更ができない(一括置換など)
- undoできない
ので人的ミスが起こる可能性が高い
xcconfigとは?
Xcode の Build Settings をコードで設定するファイルです。
XcodeのGUIと違って
- diffがわかりやすい
- 一括置換などテキスト編集がなんでもできる
- undoし放題
プロジェクトに導入してみた
手順1:Build Configurationごとの設定ファイルを用意する
Xcodeで新規ファイルを作成する際、Configuration Settings File
を選択
必要な設定をファイルに書く
Buildする環境ごとに設定が違う場合は、ベースとなるConfigファイルを作って、それをインクルードしたConfig.debug.xcconfig
のようなファイルを用意するのが良いです。
他ファイルのConfigファイルの設定は#include
でインクルードできます
TIPS
Xcode の Build Settings上でcmd+aしてコピペすれば、現在の設定を丸ごとxcconfigにコピーできます
手順2:プロジェクトで設定ファイルを読み込む
PROJECT > ConfigurationsからBuild SchemeごとのConfigファイルを選択
手順3:設定の反映
Xcode上のBuild Settingsで設定を直書きしている場合、そちらの設定が勝ちます。
そのためxcconfigの設定を反映するためには、Xcode上のBuild Settingsは項目ごとに$(inherited)
を指定する必要があります(=設定の行にカーソルを合わせてDeleteキーで削除すればOK)
ハマったこと
cocoapodsを使っている場合、podsの設定の#includeが必要
cocoapodsが生成したConfigファイルの設定も読み込む必要があるため、
podsの設定を各Configurationごとのファイルで#include
する必要があります
#include "Pods/Pods/Target Support Files/Pods-xxx/Pods-xxx.release.xcconfig"
最終的にこんな感じのファイルになりました
(Config.debug.xcconfigの例)
#include "xxx/xxx/Supporting Files/Config.base.xcconfig"
#include "Pods/Target Support Files/Pods-xxxTarget-xxx/Pods-xxxTarget-xxx.debug.xcconfig"
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 XXX=1
IPHONEOS_DEPLOYMENT_TARGET = 11.0
... 各設定続く
xcconfigを活用することで、project設定周りの人的ミスをいくらか減らせるかと思います
参考記事
http://qiita.com/paming/items/34f94a829c09eddfee95
http://www.lifeaether.com/self/blog/?p=523