[UIScene] UIScene, UIWindowScene, UISceneSession 이란 무엇인가
iOS13부터 멀티 윈도우가 가능해지면서
UI Structure에 UIWindowScene이라는 개념이 등장했습니다.
UISceneSession이라는 개념도 함께요..!!
그럼 UIScene, UIWindowScene, UISceneSession에 대해 간단히 살펴보겠습니다
[1] UIScene
- 앱 UI의 하나의 instance 또는 복사본을 의미합니다.
- 아래와 같은 상황에서는 세개의 scene이 있다 라고 말할 수 있습니다.
- 특정한 session과 connection 정보들로 Scene을 만듭니다.
- UISceneDelegate를 이용하여 Scene의 life-cycle events을 매니징할 수 있습니다. UISceneDelegate에는 아래와 같은 라이프사이클 관련 함수들이 있습니다.
[2] UIWindowScene
- UIScene의 서브클래스로 앱의 하나 이상의 윈도우를 관리합니다.
- 직접 windowScene을 만들지 말라고 합니다. 대신에 configuration time에 너가 원하는 UIWindowScene에 대해서 명시해주라고 합니다. 그 방법으로는 info.plist의 scene configuration details 관련된 부분에 너가 원하는 UIWindowScene의 클래스 네임을 넣어두면 된다고 합니다.
뭔가 이쯤에 넣어둬야할 feel인데 좀 더 찾아보겠습니다.
- 이 그림답게(??) windows와 screen이라는 프로퍼티를 가지고 있습니다.
- UISceneDelegate의 서브클래스인 UIWindowSceneDelegate 라는 것이 있습니다.
app-specific tasks를 관리하는데 사용할 수 있는 메소드들이 있다고 하네요.
프로젝트를 만들면 자동으로 만들어지는 SceneDelegate가 UIWindowSceneDelegate를 채택하고 있습니다. 어쩐지 낯설지 않았군요...!!
[3] UISceneSession
- 앱의 scenes 중 하나의 scene에 대한 정보를 포함하고 있는 오브젝트 입니다.
- 그래서 scene이라는 프로퍼티가 있습니다. 옵셔널인데 scene이 session으로부터 connect & disconnect 되기때문인 것 같습니다.
- scene의 configuration에 대한 정보도 가지고 있습니다.
- session의 정보 관련된 몇가지 프로퍼티들이 더 있네요
[4] 역할들
iOS 12 이하, AppDelegate 밖에 없던 시절에는
Process LifeCycle과 UI LifeCycle을 모두 AppDelegate에서 처리하다가
iOS 13에 SceneDelegate가 등장하고 UI LifeCyle처리를 SceneDelegate가 하도록 바뀌었잖아요...!
그래서 역할 분담(?)이 이렇게 됩니다.