Open1

SwiftUI: Xcodeプレビュー時にだけコードが実行されるようにしたい

kabeyakabeya

題名の通りなんですけども。

SwiftUIはプレビュー時にもコードがコンパイルされて実行されたうえで、その結果がXcode内に表示されているのですが、「このコードはプレビュー時だけ実行するようにしたいな」ということがあったりなかったりします。
(例えば今回の私のケースでは、フォーマッタに設定するカレンダのロケールですね)

#if targetEnvironment(xcodePreview)のようなのがあれば良いのですが、ありません。
調べたところ、プレビューが実行されているプロセスの環境変数「XCODE_RUNNING_FOR_PREVIEWS」に値1が設定されるようなので、以下のようにすればプレビュー時だけ実行するようにでき、シミュレータや実機デバッグ時には(もちろんリリース時も)実行されないようになります。

#if DEBUG
    if ProcessInfo.processInfo.environment["XCODE_RUNNING_FOR_PREVIEWS"] == "1" {
        // ここにプレビュー時にだけ実行されるコードを書く
    end if
#endif