はじめに
iOS App Dev Tutorials / UIKitに取り組んだ際、#if DEBUG
フラグを活用した処理の実装に遭遇しました。チュートリアルによると、このフラグで囲まれたコードがコンパイルされなくなるようです。しかし、このコードが具体的に何を意味しているのか、また、同様のフラグが他に存在するのかについて疑問が残ったため調べてみました。
#if DEBUGフラグについて
デバッグビルドの際に特定のコードを実行するため、Swiftでは#if DEBUG
を使用し下記のようにブロックを作成します。
#if DEBUG
// デバッグモードでのみ実行されるコード
print("Debugging Only")
#endif
これにより、ブロック内のコードはリリースビルドでは無視されるようになります。
活用法
- ログ出力を制御し、デバッグ時のみ詳細なログを出力させる
- デバッグ時のみ実行されるコードブロックを作成して、テストケースを追加する
Conditional Compilation Blockについて
#if
,#endif
というディレクションに囲まれたこのようなブロックをConditional Compilation Block(条件付きコンパイルブロック)と呼び、下記の形式で記述されます。
#if <条件>
<コンパイル制御したい内容>
#endif
通常のif文と異なり、コンパイル条件はコンパイル時に評価され、Trueの場合にブロックが実行されます。
また、#elseif
,#else
を使用することで分岐処理も可能です。
条件としては、下記の項目が使用可能です。
DEBUGは-D command line flagに該当するようです。
- Bool値
- -D command line flag (例: DEBUG)
- プラットフォーム条件 (例: os(macOS)、arch(x86_64))
また、XcodeのBuild Settings -> Swift Compiler - Custom Flagsを設定することで、リリースビルドのみの処理を行うためのフラグなどを設定することもできるようです。
<参考>