9
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Xcodeに引数を渡す LaunchArg & Env Variables

Last updated at Posted at 2020-02-25

about

ネットには古いXcodeの情報しかなく、使い分けやコツをまとめた記事がなかったので記載します。

Xcodeでは2種類の方法で実行引数を受け取ることができます。

  • Arguments Passed On Launch
  • Environment Variables

Swiftのコード内で引数を使う方法を解説します。

環境

  • Xcode11.x
  • Swift4.x

設定方法

対象Scheme -> Edit Scheme -> Run -> Arguments

scheme_argv.png

それぞれスクショのように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での利用については以下に記載しました!

XcodeのXCUITestで実行時に引数を渡す

9
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?