[Swift] App Delegate, Scene Delegate

Charlie·2022년 9월 6일
0

AppDelegate가 하는 일

  1. 앱의 가장 중요한 데이터 구조를 초기화
  2. 앱의 scene 환경설정
  3. 앱 외부에서의 알림에 대응 (배터리 부족, 다운로드 완료 등)
  4. 앱 자체를 타겟하는 이벤트에 대응 (앱 시작, 종료)
  5. 실행 시 요구되는 모든 서비스를 등록 (애플 푸쉬알림, 카카오 로그인 등)

Scene이란?

  • UIKit은 UIWindowScene 객체를 사용하는 앱 UI의 각 인스턴스를 관리
  • Scene에는 UI의 하나의 인스턴스를 나타내는 windows와 view controllers가 들어있다.
  • 각 scene에 해당하는 UIWindowSceneDelegate 객채를 가지고 있고, 이 객체는 UIKit과 앱 간의 상호 작용을 조정하는 데 사용된다.
  • Scene들은 같은 메모리와 앱 프로세스 공간을 공유하면서 서로 동시에 실행되기 때문에 결과적으로 하나의 앱은 여러 scene과 scene delegate 객체를 동시에 활성화 할 수 있다.

Scene Session이란?

  • scene 고유의 런타임 인스턴스를 관리
  • 사용자가 앱에 새로운 scene을 추가하거나 프로그래밍적으로 scene을 요청하면 시스템은 그 scene을 추적하는 session 객체를 생성한다.
  • 생성된 session 객체에는 고유한 식별자와 scene의 구성 세부사항들이 들어있다.
  • UIKit은 session 정보를 그 scene의 생애 동안 유지하고 app switcher에서 사용자가 그 scene을 클로징 하는 것에 대응하여 해당 session을 파괴한다.
  • session 객체는 직접 생성하지 않고 UIKit이 앱의 사용자가 인터페이스에 대응하여 생성된다.

AppDelegate 메소드

  • didFinishLaunchingWithOptions : 앱이 실행된 직후 사용자의 화면에 보여지기 직전에 호출
  • willFinishLaunchingWithOptions : 앱이 최초 실행될 때 호출
  • applicationWillResignActive : 앱이 InActive 상태로 전환되기 직전에 호출
  • applicationDidEnterBackground : 앱이 백그라운드 상태로 전환된 직후 호출
  • applicationDidBecomeActive : 앱이 Active 상태로 전환된 직후 호출
  • applicationWillTerminate : 앱이 종료되기 직전에 호출

SceneDelegate 메소드

  • willConnectTo : scene이 앱에 추가될 때 호출
  • sceneDidDisconnect : scene의 연결이 해제될 때 호출
  • sceneDidBecomeActive : app switcher에서 선택되면 inActive 상태에서 active 상태로 전환
  • sceneWillResignActive : active 상태테서 inActive로 전환 시 호출
  • sceneWillEnterForeground : background에서 foreground로 전환 시 호출
  • sceneDidEnterBackground : foreground에서 background로 전환 시 호출

개별적인 Scene들

scene은 기기에서 실행중인 앱 UI의 한 인스턴스로, 유저는 각 앱에 대해 여러 scene을 만들고 이를 개별적으로 표시하고나 숨길 수 있다.
각 scene마다 고유한 라이프사이클이 있기 때문에 각 scene마다 다른 실행 상태가 될 수 있다.

  • Unattached : 유저나 시스템이 앱의 새로운 scene을 요청하면 UIKit은 이를 생성하고 연결되지 않은 상태로 둔다.
  • Foreground Inactive / Active : 사용자가 요청하는 Scene은 빠르게 foreground로 이동한다.
  • Background : 시스템이 요청한 Scene은 이벤트를 처리할 수 있도록 background로 이동한다.
  • Suspended : 유저가 앱을 닫으면 UIKit은 관련 scene을 background 상태로 이동하고 결국 suspended 된다.

Reference

AppDelegate, SceneDelegate
iOS13 이후의 AppDelegate와 SceneDelegate

profile
Hello

0개의 댓글