[Xcode/SwiftUI] if DEBUGの活用

デバッグ環境と本番環境で異なるUIやロジックを表示・適用したいときに使えるテクニック。

デバッグ環境でのみ出したいメニューやロジックなどがある時に便利。

実装

import SwiftUI

struct HomeView: View {

    var body: some View {
        #if DEBUG
        Text("Hello Debug")
            .font(.largeTitle)
        #else
        Text("Hello Release")
            .font(.largeTitle)
        #endif
    }
}
  1. デバッグ環境では、アプリがDEBUGシンボルを持つため、#if DEBUG内のコードが有効になる。
  2. 本番環境でリリースビルドをするとDEBUGシンボルが無効となり、#else以下のコードが有効になる。

Debugシンボルの設定

Xcodeの初期状態だとおそらくDebugとReleaseのみなのでそのままでも問題ないが、Staging環境など後付けで入れた環境がありそこもDebug対象にしたい時は設定が必要。

  1. Xcodeでプロジェクトを開く。
  2. プロジェクトナビゲータからプロジェクト名を選択。
  3. ターゲットの「Build Settings」を選択。
  4. Swift Compiler – Custom Flagsセクションを展開し、「Active Compilation Conditions」を探す。
  5. デバッグ環境にしたい環境にDEBUGを設定する。

注意点とベストプラクティス

  • デバッグと本番のロジックは分離する:
    大規模なプロジェクトでは、環境に応じて異なる処理を多数持つ場合、コードの可読性が低下する可能性がある。
    環境に依存するロジックは専用の設定ファイルやサービスクラスにまとめるのが良い。
  • #if DEBUGの使用箇所を最小限に:
    ビジネスロジックの中で#if DEBUGを多用すると、保守性が低下するので主にUI部分やログ出力で活用する。