はじめに
iosでAppDelegateのメソッドがどんな時に呼ばれるかを知りたかったので、
Appleの資料の確認と、アプリを実装して確認しました。
実装した環境
- Xcode 10.2.1
- SWIFT 5
- ios 12
アプリライフサイクルと呼ばれるメソッド
アプリライフサイクル
下の図は、アプリライフサイクルとそれぞれの遷移時にAppDelegateで呼ばれるメソッドです。
アプリの起動時
アプリを最初のタップして、起動した時のAppDelegateの呼ばれる順番です。
- func application(_:willFinishLaunchingWithOptions)
- func application(_:didFinishLaunchingWithOptions:)
- func applicationDidBecomeActive(UIApplication)
アプリをバックグランドへ
アプリをバックグランドに移した時のAppDelegateの呼ばれる順番です。
- func applicationWillResignActive(UIApplication)
- func applicationDidEnterBackground(UIApplication)
アプリがバックグランドの状態でアプリアイコンを押す
アプリがバックグランド状態で、アプリアイコンを押すと、アプリがフォアグランドに遷移します。この時のAppDelegateの呼ばれる順番です。
- func applicationWillEnterForeground(UIApplication)
- func applicationDidBecomeActive(UIApplication)
アプリの終了時
アプリ終了時にAppDelegateの呼ばれる順番です。
- func applicationWillResignActive(UIApplication)
- func applicationDidEnterBackground(UIApplication)
- func applicationWillTerminate(UIApplication)
UniversalLinkで起動した場合
アプリ未起動時 (Not Running)
アプリが起動されていない状態(Not Running)の時に、universal linkでアプリが起動した時のAppDelegateのメソッドの呼ばれる順番です。
- func application(_:willFinishLaunchingWithOptions)
- func application(_:didFinishLaunchingWithOptions:)
- func application(_:continue:restorationHandler:)
- func applicationDidBecomeActive(UIApplication)
アプリバックグランド時(Background)
アプリがバックグランドの状態(Background)の時に、universal linkでアプリが起動した時のAppDelegateのメソッドの呼ばれる順番です。
- func applicationWillEnterForeground(UIApplication)
- func application(_:continue:restorationHandler:)
- func applicationDidBecomeActive(UIApplication)
通知をタップして起動した場合
アプリ未起動時 (Not Running)
アプリが起動されていない状態(Not Running)の時に、通知からアプリが起動した時のAppDelegateのメソッドの呼ばれる順番です。
- func application(_:willFinishLaunchingWithOptions)
- func application(_:didFinishLaunchingWithOptions:)
- func userNotificationCenter(_:didReceive:withCompletionHandler:)
- func applicationDidBecomeActive(UIApplication)
アプリバックグランド時(Background)
アプリがバックグランドの状態(Background)の時に、通知からアプリが起動した時のAppDelegateのメソッドの呼ばれる順番です。
- func applicationWillEnterForeground(UIApplication)
- func userNotificationCenter(_:didReceive:withCompletionHandler:)
- func applicationDidBecomeActive(UIApplication)
アプリ起動時(Foreground)
アプリがフォアグランドの状態(Foreground)の時に、通知をタップした時には、以下のメソッドが呼ばれます。
userNotificationCenter(_:willPresent:withCompletionHandler:)
アプリの現在の状態の取得方法
アプリの現在の状態は、UIApplication.shared.applicationState
で取得できます。状態は、UIApplication.State
で定義されているactive
、inactive
、background
の3つです。