web-dev-qa-db-ja.com

Swift:PREPROCESSOR Flags(#if DEBUGなど)を使用してAPIキーを実装する方法

Objective-Cでは、静的な文字列定数を使用して代替APIキーを定義すると便利な場合がありました(たとえば、MixPanel、Flurry、Crashlyticsなどの分析パッケージのRELEASEキーとDEBUGキーを区別するため)。

#if DEBUG
static NSString *const API_KEY = @"KEY_A";
#else
static NSString *const API_KEY = @"KEY_B";
#endif

その後...

[Analytics startSession:API_KEY];

Swiftコンパイラはプリプロセッサを使用しなくなったため、これはどのようにSwiftに変換されますか?

61
cleverbit

Appleは、 Xcode 8 の時点でSwiftプリプロセッサフ​​ラグを完全にサポートしているため、「その他Swiftフラグ」でこれらの値を設定する必要はなくなりました。

新しい設定は「アクティブなコンパイル条件」と呼ばれ、プリプロセッサフ​​ラグに相当するSwiftのトップレベルのサポートを提供します。 「その他のSwift Flags」とまったく同じ方法で使用しますが、値の前に「-D」を追加する必要はありません(したがって、少しきれいになります)。

Xcode 8リリースノート から:

Active Compilation Conditionsは、Swiftコンパイラーに条件付きコンパイルフラグを渡すための新しいビルド設定です。この設定の値の各要素は、-の要素が同じプレフィックスでclangに渡されるのと同じ方法で、Preprocessor MacrosDが先頭に付いたswiftcに渡されます。 (22457329)

enter image description here

上記の設定は次のように使用します。

#if DEBUG
    let accessToken = "DebugAccessToken"
#else
    let accessToken = "ProductionAccessToken"
#endif
98
Dan Loewenherz

更新:Xcode 8はこれを自動的にサポートするようになりました。上記の@DanLoewenherzの応答を参照してください。

Xcode 8より前は、同じ方法でマクロを使用できました。

#if DEBUG
let apiKey = "KEY_A"
#else
let apiKey = "KEY_B"
#endif

ただし、それらをSwiftで取得するには、ターゲットのビルド設定で「その他Swiftフラグ」を設定する必要があります。

  • ターゲットのビルド設定を開きます
  • 「その他のSwiftフラグ」を検索します
  • -Dフラグを前に付けて、使用するマクロを追加します

enter image description here

116
cleverbit