about
ネットには古いXcodeの情報しかなく、使い分けやコツをまとめた記事がなかったので記載します。
Xcodeでは2種類の方法で実行引数を受け取ることができます。
- Arguments Passed On Launch
- Environment Variables
Swiftのコード内で引数を使う方法を解説します。
環境
- Xcode11.x
- Swift4.x
設定方法
対象Scheme -> Edit Scheme -> Run -> Arguments
それぞれスクショのようにAppendしてみます。
2種類の入力が可能なので以下でみていきます。
- Arguments Passed On Launch
- Environment Variables
Arguments Passed On Launch
型:[String]
※ KeyとValueを対で渡すことはできません
取得方法
let argv: [String] = ProcessInfo.processInfo.arguments
argv[0] : 実行ファイルのパスが入る (ex: /Users/user/Library/Developer/CoreSimulator/Devices/3418A817-3034-4DFC-A030-32C90755376A/data/Containers/Bundle/Application/D6D1533B-B307-4C1B-9DE9-1DDD6744B503/test_develop.app/test_develop)
argv[1] : 設定した環境変数
argv[2] : 設定した環境変数2個目
.
.
.
注意点
次で解説するEnvVarのようにkeyを設定できないので、引数が増えたとき番号がずれる可能性があります。
例として、環境変数にisTestMode
を渡して以下のような実装をしている場合
if ProcessInfo.processInfo.arguments[1] == "isTestMode" {
print("test mode running")
}
以下のようにcontainsで含まれているか確認するのが良いでしょう
if arguments.contains("isTestMode") {}
Environment Variables
型:[String : String]
Key(Name)とValueを対で設定することができます。
取得方法
スクショでは以下のようになります。
let value = ProcessInfo.processInfo.environment["mode"]
print(value) // develop
以下のようにswitch文で使うのが良いでしょう
switch ProcessInfo.processInfo.environment["mode"] {
case "develop":
case "production":
defult:
}
おわり
XCTestでの利用については以下に記載しました!