XcodeのSchemeで値を切り替える方法を探る
背景
APIの向き先とかをTargetを増やしてswiwt other flagsで#if DEBUG
とか#if STAGING
でやってる。ので環境が増えるたびにtargetが増えていってしまうのでやめたい。
実行時に環境変数的に値を渡せないか
SchemeのPre-actionsで追加する
- Build、Run、Test、Archiveで共通して書けるのは、Pre-actionsとPost-actionsである。
- ここにはshが書ける。ここのshの中で、
export HOGE=1
を書いてプログラム内から取得できるか。#if HOGE
-> ダメNSProcessInfo.processInfo().environment["HOGE"]
-> ダメ- InfoPlistにcustom keyを追加して、valueに$(HOGE) -> ダメ
- Build SettingsにUser-Defined Settingとして追加して、valueとして、$(HOGE) -> ダメ
SchemeのEnvironment Variablesを使う
NSProcessInfo.processInfo().environment["HOGE"]
で取得できた。- しかし、Environment VariablesはRunとTestにしか存在しないので、BuildやArchive時に使えない。
- xcodebuildコマンド経由でなら環境変数を渡せる可能性はある。
xcconfigの切り替え
やっぱり、これでやるしかなさそうだ。
fastlaneでflags渡す
https://github.com/fastlane/fastlane/issues/408
fastlaneでother swift flags渡す方法もあった。社内配布はどうせfastlane使うのでありかもしれない。
Use this in swift: xcargs: "OTHER_SWIFT_FLAGS='$(inherited) -DVARNAME=1'"