2
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?

More than 3 years have passed since last update.

【SwiftUI】アプリの起動状態を取得する方法【iOS】

Last updated at Posted at 2020-12-24

初投稿です!
SwiftUIでiOSアプリを開発していて、アプリの起動状態を取得する方法を調べるのに苦労したので備忘録も兼ねてこの場で共有させていただきます。

iOSアプリにおける起動状態について

iOSアプリの起動状態はActive, Inactive, Backgroundの3つの状態に分けることができます。
状態遷移図は下図の通りです。起動するときはInactiveを経由してからActiveになることや、ActiveからBackgroundになるときもInactiveを経由することが分かると思います。

詳しくはApple公式ドキュメントを参照してください。

SwiftUIにおける取得方法

最近までSwiftUIではアプリの起動状態を取得するAPIが用意されていませんでしたが、iOS14からはScenePhaseを利用することで簡単に取得することができるようになりました。

具体的には、Appインスタンスに以下のプロパティを追加することで取得が可能になります。

@Environment(\.scenePhase) private var scenePhase

例を見てみましょう。Xcodeで新規プロジェクトを立ち上げたときに自動生成されるTestApp.swiftを以下のように書き換えます。(この場合Testがプロジェクト名となります)

//
//  TestApp.swift
//  Test
//
//  Created by Ossamoon on 2020/12/25.
//

import SwiftUI

@main
struct TestApp: App {
    @Environment(\.scenePhase) private var scenePhase

    var body: some Scene {
        WindowGroup {
            ContentView()
        }
        .onChange(of: scenePhase) { phase in
            switch phase {
            case .background:
                print("バックグラウンド状態になりました")
            case .active:
                print("アクティブ状態になりました")
            case .inactive:
                print("非アクティブ状態になりました")
            default:
                print("このメッセージがでたら何か変だよ")
            }
        }
    }
}

アプリをシミュレーターで起動してみましょう。すると、コンソールに「アクティブ状態になりました」というメッセージが現れます。

ここからスワイプでメニューを表示すると、「非アクティブ状態になりました」というメッセージが現れます。

さらに他の画面に移動すると、「バックグラウンド状態になりました」というメッセージが現れます。

ここで再びアプリの画面に戻ると、「非アクティブ状態になりました」というメッセージに続き「アクティブ状態になりました」というメッセージが現れます。

こんな感じの挙動を示します。実際に皆さんの手元で色々いじってみていただけたらと思います。

まとめ

ScenePhaseを使うとアプリの起動状態を簡単に取得できることがお分かりいただけたかと思います。

iOS14以降でないと使えないという制約はありますが、とても便利なAPIなので皆さんもぜひScenePhaseをお試しください!

参考文献

2
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
2
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?