XcodeGenでBuild ConfigurationとSchemeの設定をする
Table of Contents
XcodeGenでDebugやReleaseなどBuild Configuration自体を追加したり、Build Configuration毎にビルドパラメータを変えたりする方法について説明します。
新しいBuild Configurationの登録
デフォルトはDebugとReleaseですが、新しく追加する場合はconfigs
プロパティで追加します。
configs:
Debug: debug
Beta: release
AppStore: release
CI: debug
例えば Beta: release
とは、Build Configuration名をBeta
と名付け、ベースをReleaseにしてあります。
値の部分がdebugまたはrelease以外だとデフォルト値が適用されなくなります。
Build Configuration毎にビルドパラメータを変更
デフォルトのDebugとReleaseとは違いをつけたいから新しくBuild Configurationを追加したのに
そのままでは意味がありません。Build Configuration毎にビルドパラメータを変更します。
CIではAssertionを無効にしてみる
例えばCI時のみ動かないassertを作ろうと思います。
assert(_:)
メソッド自体は適当です。何でもいいので説明省きます。
#if DISABLE_ASSERTION
func assert(_ string: String) {}
#else
func assert(_ string: String) {
Swift.assertionFailure(string)
}
#endif
コード側で重要なのはプリプロセッサの条件式に入ってるDISABLE_ASSERTION
です。
これをXcodeGenで定義するには、settings.configs.CI.SWIFT_ACTIVE_COMPILATION_CONDITIONS
に値を追加します。
targets:
CustomBuildConfig: # ← ターゲット名
# 〜 略 〜
settings:
configs:
CI:
SWIFT_ACTIVE_COMPILATION_CONDITIONS: [DEBUG, DISABLE_ASSERTION]
これを実行するとXcodeに反映されます。
settings
はプロジェクト仕様のルートに置くことでターゲット毎でなく全体適用させることもできます。
プロパティ名の見つけ方
例えばXcodeのBuild Settings > Development Teamを用意する場合はDEVELOPMENT_TEAM
プロパティをセットします。
settings:
DEVELOPMENT_TEAM: hogehoge
ではどうやってXcodeのBuild Settingsとプロジェクト仕様のプロパティを一致させてるのか?
それはxcconfigと同じ値を使っています。
詳しくは「xcconfigで使うパラメータ名の見つけ方 」にまとめてあります。
XcodeGenでテスト時のBuild ConfigurationをCIにする
前述した方法を実施することでCI用のBuild Configurationとビルドパラメータを定義することができます。
しかし生成したXcodeではBuild ConfigurationがDebugのままです。
これだとCIでXcode生成して実行する場合では意図したBuild Configurationになりません。
デフォルトをDebugではなくCIにする必要があります。
デフォルトにするにはScheme
を使うことで定義できます。
schemes:
CustomBuildConfig: # ← スキーム名
build:
targets:
CustomBuildConfig: all # ← ビルド対象ターゲットと対応Actionの設定
CustomBuildConfigTests: [test]
test:
config: CI
こうすることで下図のようになります。
これを追加することで生成されたXcodeプロジェクトを開くと初めからTestのBuild ConfigurationはCIになります。
テストターゲットやカバレッジ指定をする
前述した設定でTest時のデフォルトBuild ConfigurationをCIにすることができました。
しかし、いざテストを実行しても動きません。
それはテストターゲットが設定されていないためです。
schemes:
CustomBuildConfig:
build:
targets:
CustomBuildConfig: all
CustomBuildConfigTests: [test]
test:
targets:
- CustomBuildConfigTests # ← テストターゲット名
config: CI
gatherCoverageData: true
先程のymlのtestプロパティを変更しました。こうすることでテストターゲットが選ばれた状態でXcodeプロジェクトが作成されます。
今回の使ったコードはGitHubにアップしてありますので、全体像を掴みたい場合はご確認ください。
XcodeGenでEmbedded frameworkを登録する
XcodeGenでBuild Configuration別のビルドチューニングについて説明しました。
もしまだSettings周りで不明点がある場合は、「XcodeGenのSettings周りを整理する
」をおすすめします。
次はEmbedded frameworkを「Embedded frameworkの理解と作成方法 」で説明します。