k-coding
Scene Delegate , App Delegate 본문
Scene Delegate , App Delegate
오늘은 UIKit에서 프로젝트를 처음 생성하면 제일 상단에 자동 생성되는 swift 파일인
요 두 파일 AppDelegate와 SceneDelegate에 대하여 알아보겠습니다.
Scene Delegate이라는 개념자체가 iOS 13이후로 생긴것으로
그 전에는 AppDelegate가 큰 범위로 Process LifeCycle과 UI LifeCycle을 모두 관리하였는데요.
때문에 하나의 앱에 하나의 window를 가졌지만,
iOS13 이후로는 AppDelegate가 관리하던 UI LifeCycle을 SceneDelegate가 관리하게 되었습니다.
이렇게 바뀜으로 인해서 하나의 앱에서 여러개의 Scene을 분할해서 볼 수 있게 되었습니다.
근데 2가지로 분리 된것 말고도 AppDelegate에 Session LifeCycle라는게 새로 생겼습니다.
이건 무엇일까요 ? Session LifeCycle 은 Scene LifeCycle과 같은 것으로
Scene Delegate에서 Scene Session이 생성되거나 삭제될 때, AppDelegate에 보고하게 됩니다.
Scene이란?
Apple Developoer Document를 참고하자면
Scene에 대해서 아래와 같이 설명하고있습니다.
"
UIKit는 UIWindowScene 객체를 사용하는 앱 UI의 각 인스턴스를 관리합니다.
Scene에는 UI의 하나의 인스턴스를 나타내는 windows와 view controllers가 들어있습니다.
또한 각 scene에 해당하는 UIWindowSceneDelegate 객체를 가지고 있고,
이 객체는 UIKit와 앱 간의 상호 작용을 조정하는 데 사용합니다.
Scene들은 같은 메모리와 앱 프로세스 공간을 공유하면서 서로 동시에 실행됩니다.
결과적으로 하나의 앱은 여러 scene과 scene delegate 객체를 동시에 활성화할 수 있습니다.
"
기존 AppDelegate의 UI LifeCycle에서 담당했던 역할을 SceneDelegate가 하게 되면서
AppDelegate에서 Scene Session을 통하여 Scene에 대한 업데이트 정보를 받게 됩니다.
Scene Session 이란?
"
UISceneSession 객체는 scene의 고유의 런타임 인스턴스를 관리합니다.
사용자가 앱에 새로운 scene을 추가하거나 프로그래밍적으로 scene을 요청하면,
시스탬은 그 scene을 추적하는 session 객체를 생성합니다.
그 session에는 고유한 식별자와 scene의 구성 세부사항(configuration details)가 들어있습니다.
UIKit는 session 정보를 그 scene 자체의 생애(life time)동안 유지하고
app switcher에서 사용자가 그 scene을 클로징하는 것에 대응하여 그 session을 파괴합니다.
session 객체는 직접 생성하지않고 UIKit가 앱의 사용자 인터페이스에 대응하여 생성합니다.
또한 위 3번에서 소개한 두 메소드를 통해서 UIKit에 새로운 scene과 session을 프로그래밍적 방식으로 생성할 수 있습니다.
"
Scene 동기화
기존의 Scene을 동기화 시키는 방법에는
ViewController가 View에서의 움직임을 감지하고 Model Controller에게 전달했다면
지금은 ViewController가 감지하고 Model Controller에 전달하는것은 같지만,
Model Controller가 또 다른 View Controller에게도 View update 소식을 전달합니다.
iOS13 이후로 바뀐 AppDelegate의 역할
iOS12 이전에는 앱이 foreground, background 상태일 때 앱의 상태를 업데이트 하는 등
주요 LifeCycle을 관리했었지만, 더이상 이 부분을 담당하지않고
- 앱의 가장 중요한 데이터 구조를 초기화하는 것
- 앱의 scene을 환경설정(Configuration)하는 것
- 앱 밖에서 발생한 알림(배터리 부족, 다운로드 완료 등)에 대응하는 것
- 특정한 scenes, views, view controllers에 한정되지 않고 앱 자체를 타겟하는 이벤트에 대응하는 것.
- 애플 푸쉬 알림 서브스와 같이 실행시 요구되는 모든 서비스를 등록하는것.
등의 일을 담당합니다.
'iOS > iOS' 카테고리의 다른 글
iOS Main / Background Thread (0) | 2022.06.01 |
---|---|
iOS ) Process 와 Thread (0) | 2022.05.30 |
상태 변화에 따라 동작을 처리하기 위한 델리게이트 메서드 (0) | 2022.05.29 |
App States (foreground / background) (0) | 2022.05.27 |
실제 디바이스가 없을 경우 할 수 있는것과 없는 것 (0) | 2022.05.23 |