Build Settingsでの値の決まり方
Build Settingの値はどうやって決まっていくのか?Build Settingsを開いて"Levels"を見ると、どのレベルでどんな値になっていくのかを見る事が出来ます。
iOS Default → (xcconfig)→Project→Target の順で、値を「上書き」し続ける形で値が決定していきます。
各Levelにて、値の設定が無ければ親の設定で上書きされています。しかし、何か設定をすると親の設定が消えてしまいます。その時は$(inherited)
を追加して親の設定を明示的に継承します。
- そのレベルでの設定無し→親の設定で上書き
- そのレベルでの設定有り
-
$(inherited)
が有る→$(inherited)
を親の設定と置き換える -
$(inherited)
が無い→親の設定は消える
-
xcconfigファイルはどこで設定するのか?
xcconfigファイルはテキストファイルなので作るのは簡単です。
↓CocoaPodで生成されたxcconfigファイル
Pods.xcconfig
GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers" "${PODS_ROOT}/Headers/AFNetworking" "${PODS_ROOT}/Headers/DCIntrospect" "${PODS_ROOT}/Headers/TestFlightSDK"
LIBRARY_SEARCH_PATHS = "$(PODS_ROOT)/TestFligh
tSDK"
OTHER_LDFLAGS = -ObjC -lTestFlight -lz -framework CoreGraphics -framework MobileCoreServices -framework QuartzCore -framework Security -framework SystemConfiguration -framework UIKit
PODS_ROOT = ${SRCROOT}/Pods
しかし、ただ作ってプロジェクトに入れただけでは、Build Settingsには出てきません。この登録は、Project設定の中の"Info"→"Configurations"で行います。
なぜこんな事を調べてたのか
$(inherited)
が、何を継承しているのかがよく分かってなかったからです。階層構造になってるプロジェクトでの親/子プロジェクトの設定を引き継ぐのかと思ってました。。。