【SwiftUI】
フォアグラウンド・バックグラウンドを判定する方法

アプリの表示・非表示を判定する

投稿日 2023/08/24 更新日 2023/08/24


こんにちは。IT業界歴4年目の「元木皇天」です。

今回はSwiftUIで、「フォアグラウンド・バックグラウンド」を判定する方法について解説いたします。

環境
OS:MacOS Ventura 13.4
Swift:Ver 5.3
Xcode:Ver 14.3.1

参考文献

フォアグラウンド・バックグラウンドを判定する

SwiftUIでフォアグラウンド・バックグラウンドを判定するには、環境値の「ScenePhase」を使用します。

@Environment(\.scenePhase) private var scenePhase

scenePhaseはenum型の値で、アプリの状態によって値が変化します。

enum値状態
.activeフォアグラウンド
.inactiveフォアグラウンドとバックグラウンドの中間の状態
.backgroundバックグラウンド

「.inactive」はiPhoneのホームボタンを2回押した時などに表示される以下の画面の状態のことを表しています。

インアクティブ

実際に、「scenePhase」を使用して、フォアグラウンド・バックグラウンド・インアクティブを判定するサンプルコードは以下になります。

import SwiftUI

struct ContentView: View {
    @Environment(\.scenePhase) private var scenePhase
    @State  private var text: String = ""

    var body: some View {
        Text(self.text)
            .onChange(of: scenePhase){ phase in
                switch phase{
                case .active:
                    self.text = "フォアグラウンド"
                case .inactive:
                    self.text = "インアクティブ"
                case .background:
                    self.text = "バックグラウンド"
                    print("バックグラウンド")
                @unknown  default:
                    self.text = ""
                }
            }
    }
}

.onChabgeでscenePhaseの値が変わったタイミングで、任意の処理を実行できます。

ちなみに、上記コードを実行した結果が以下になります。

-フォアグラウンド-

フォアグラウンド

-インアクティブ-

インアクティブ

-バックグラウンド-

※画面上からは確認できないので、コンソールログから確認しました。

バックグラウンド

まとめ

SwiftUIでフォアグラウンド、バックグラウンドを判定するには、環境値:ScenePhaseの値を監視して
値が.activeの場合はフォアグラウンド
値が.backgroundの場合はバックグラウンド
と判定できる。

参考文献・おすすめ文献

Apple Developer Site - ScenePhase