1. ホーム
  2. ios

[解決済み] プリプロセッサー・マクロがない場合、Xcodeプロジェクトでプロジェクト・レベルで実用的なスキーム固有のフラグを定義する方法はありますか?

2022-04-20 16:04:47

質問

swiftの前は、α、β、ディストリビューションビルドのスキーム一式を定義していました。 これらのスキームには、プロジェクト レベルで特定の動作をゲートするために定義されたマクロのセットがあります。 最も単純な例は、実行ビルドのデフォルトスキームで、すべての Xcode プロジェクトに対してデフォルトで定義されている DEBUG=1 マクロです。 このマクロは、#ifdef DEBUG ... と照会して、それに応じてコードを決定し、必要でないコードをコンパイルすることもできます。

マクロがサポートされていないため、このような設定上のゲーティングはswiftでは簡単ではなさそうです。 私は、コードがコンパイルされるかどうか、それ自体は気にしません。 私は、ビルドスキームに基づいて機能をゲートしたいのですが。

どのように解決するのですか?

Swift では、以下のように "#if/#else/#endif" プリプロセッサマクロをまだ使用できます (より制限されますが)。 アップルのドキュメント . 以下はその例です。

#if DEBUG
    let a = 2
#else
    let a = 3
#endif

ここで、"DEBUG"のシンボルを他の場所に設定する必要がありますが。Swift Compiler - Custom Flags" セクションの "Other Swift Flags" 行で設定します。DEBUG シンボルを追加するには -D DEBUG のエントリーをご覧ください。

(ビルド設定 -> Swift コンパイラ - カスタムフラグ)

通常通り、Debugの時とReleaseの時で異なる値を設定することができます。

実際のコードでテストしてみました。プレイグラウンドでは認識されないようです。