iOS 13 이후부터는 위처럼 SceneDelegate가 상태변화에 따라 동작을 처리하게 되었음. 대신 AppDelegate는 프로세스 레벨에서의 event 발생을 알려주며, session 생명주기를 application에게 전달하는 역할을 함.
SceneDelgate의 메서드는 아래와 같음.
func scene(UIScene, willConnectTo: UISceneSession, options: UIScene.ConnectionOptions)
// scene이 추가 되었을 때 호출
func sceneDidDisconnect(UIScene)
// scene이 제거 되었을 때 호출
func sceneWillEnterForeground(UIScene)
// scene이 Foreground로 진입할 때 호출
func sceneDidBecomeActive(UIScene)
// scene이 Active 상태가 되어 실행 중일 때 호출
func sceneWillResignActive(UIScene)
// scene이 Background 상태로 진입할 때 호출
func sceneDidEnterBackground(UIScene)
// scene이 Background 상태가 되었을 때 호출
위를 통해 iOS 13 이전 버전에서는 AppDelegate만을 사용하여 App Lifecycle과 UI관련 Lifecycle 관련 로직들을 다뤘음을 알 수 있음.
AppDelegate는 UIApplication 객체와 함께 앱이 실행되면서 생성되어 계속 존재하는 UIApplicationDelegate 객체이며, 아래의 기능들을 제공하며 그 중에서 상태변화를 처리하는 메소드는 아래와 같음.
func application(UIApplication, willFinishLaunchingWithOptions: [UIApplication.LaunchOptionsKey : Any]?) -> Bool
// 앱이 구동되어 필요한 초기 실행 과정이 완료되기 직전에 호출
func application(UIApplication, didFinishLaunchingWithOptions: [UIApplication.LaunchOptionsKey : Any]?) -> B
// 앱이 사용자에게 표시되기 직전에 호출
func application(UIApplication, configurationForConnecting: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration
// 앱이 새로운 scene 또는 window를 제공하려고 할 때 호출
func application(UIApplication, didDiscardSceneSessions: Set<UISceneSession>)
// 유저가 App switcher를 통해 하나 이상의 scene을 닫았을 때 호출
func applicationWillEnterForeground(UIApplication)
// 앱이 Foreground로 진입할 때 호출
func applicationDidBecomeActive(UIApplication)
// 앱이 Active 상태가 되어 실행 중일 때 호출
func applicationWillResignActive(UIApplication)
// 앱이 Background 상태로 진입할 때 호출
func applicationDidEnterBackground(UIApplication)
// 앱이 Background 상태가 되었을 때 호출
func applicationWillTerminate(UIApplication)
// 앱이 종료되었을 때