1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Swift】#if DEBUGによるデバッグ処理とConditional Compilation Blockについて

Posted at

はじめに

iOS App Dev Tutorials / UIKitに取り組んだ際、#if DEBUGフラグを活用した処理の実装に遭遇しました。チュートリアルによると、このフラグで囲まれたコードがコンパイルされなくなるようです。しかし、このコードが具体的に何を意味しているのか、また、同様のフラグが他に存在するのかについて疑問が残ったため調べてみました。

#if DEBUGフラグについて

デバッグビルドの際に特定のコードを実行するため、Swiftでは#if DEBUGを使用し下記のようにブロックを作成します。

Swift
#if DEBUG
    // デバッグモードでのみ実行されるコード
    print("Debugging Only")
#endif

これにより、ブロック内のコードはリリースビルドでは無視されるようになります。

活用法

  • ログ出力を制御し、デバッグ時のみ詳細なログを出力させる
  • デバッグ時のみ実行されるコードブロックを作成して、テストケースを追加する

Conditional Compilation Blockについて

#if,#endifというディレクションに囲まれたこのようなブロックをConditional Compilation Block(条件付きコンパイルブロック)と呼び、下記の形式で記述されます。

Swift
#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を設定することで、リリースビルドのみの処理を行うためのフラグなどを設定することもできるようです。

スクリーンショット 2024-02-04 0.43.05.png

<参考>

1
3
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
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?