Reference
- UIWindowSceneDelegate : UIWindowSceneDelegate
- UIWindowScene : UIWindowScene
- UISceneSession : UISceneSession
- Scene Life cycle : Managing Your App's Life Cycle
🔘 화면 계층
UIWindowScene
UISceneSession
🔘 SceneDelegate
SceneDelegate
windowScene 객체는 UIScene
의 subclass로, device에 window를 display하고, 자신의 delegate에게 scene life cycle 노티를 날립니다
여기서 windowScene의 delegate란 UIWindowSceneDelegate
를 채택하는 객체를 말하며, 대표적인 예로 Xcode가 기본적으로 제공하는 SceneDelegate
가 있습니다
windowScene과 windowSceneDelegate 객체를 직접 만들면 안되고 아래 2가지 선택지를 통해 어떻게 생성될지에 대한 configuration을 제공할 수 있습니다
Info.plist
의 scene configuration에 class name 등을 포함시켜 명시할 수 있습니다application(_:configurationForConnecting:options:)
라는 AppDelegate 메서드에서 UISceneConfiguration 객체를 만들 때 class name을 명시하는 방식도 가능합니다시스템은 scene을 유발하는 유저 상호작용이 발생하면, 우리가 제공한 scene configuration에 기반하여 scene/sceneDelegate 객체를 생성합니다
또는 requestSceneSessionActivation(_:userActivity:options:errorHandler:)
를 호출하여 UIKit에게 scene 생성을 요청하는 방식도 있습니다.
🔘 window 관련
windows
: 해당 scene의 windowscreen
: scene의 content가 표시되고 있는 UIScreen 객체🔘 환경 변화 콜백
traitCollection
: App 환경을 말하며, sizeClass, layoutDirection, preferredContentSize 등이 포함된다🔘 Status Bar 관련
statusBarManager
: status bar를 숨기거나 style, frame 등을 변경할 수 있다하나의 Scene 객체는 단 하나의 Session을 반드시 가진다. session은 연결된 scene에 대한 상세정보를 가진다
session의 life time은 UIKit에 의해 scene과 동일하게 유지된다. 즉, 함께 생성되며, scene이 닫기면 session도 따라서 제거된다. 이를 위해 id 프로퍼티도 가진다
session 객체를 직접적으로 생성하면 안됩니다. UIKit이 유저와의 상호작용에 따라 대신 만들게 되어 있습니다
만약 코드적으로 객체 생성을 제어하려면 requestSceneSessionActivation(_:userActivity:options:errorHandler:)
를 호출하는 방법이 있습니다. 이 메서드는 UIKit이 새로운 scene과 session을 생성하도록 요청합니다. 이 때는 Info.plist에 기반한 default configuration으로 session을 초기화합니다
configuration
: scene 생성에 대한 configurationpersistentIdentifier
: session의 life time 관리를 위한 IDstateRestorationActivity
: scene 상태복구를 위한 UserActivity 객체userInfo
: scene과 관련한 커스텀 속성windowScene과 windowSceneDelegate 객체를 직접 만들면 안되고 아래 2가지 선택지를 통해 어떻게 생성될지에 대한 configuration을 제공할 수 있습니다
Info.plist
의 scene configuration에 class name 등을 포함시켜 명시할 수 있습니다application(_:configurationForConnecting:options:)
라는 AppDelegate 메서드에서 UISceneConfiguration 객체를 만들 때 class name을 명시하는 방식도 가능합니다시스템은 scene을 유발하는 유저 상호작용이 발생하면, 우리가 제공한 scene configuration에 기반하여 scene/sceneDelegate 객체를 생성합니다
🔘 환경 변화 콜백
windowScene(_:,didUpdate:,interfaceOrientation:,traitCollection:)
: scene의 size, orientation, trait 변화에 대한 콜백🔘 Scene Life Cycle
부모 프로토콜인 UISceneDelegate에 정의된 메서드들입니다
scene(_:willConnectTo:)
: App에 추가됨sceneDidDisconnect()
: App에서 제거됨sceneWillEnterForeground()
: Foreground 진입 직전sceneDidBecomeActive()
: active 상태가 되어 유저 이벤트에 대응할 수 있음sceneWillResignActive()
: active가 해제되기 직전sceneDidEnterBackground()
: background에 진입됨
안녕하세요 너무 좋은 글 감사합니다.
혹시 스터디 노션에 정리하고 공유를 해도 될까요 ? 출처는 해당 링크로 밝히겠습니다.