まーぽんって誰がつけたの?

iOS→Scala→インフラなおじさん技術メモ

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'"