"Tell the system about your app’s scenes, including the objects you use to manage each scene and its initial user interface."
각 씬 및 씬의 초기 UI를 관리하기 위해 사용하는 객체를 포함해 앱의 씬에 대해서 시스템에게 알려줍니다.
iOS 13 및 이후 버전에서 사용자는 앱의 UI 여러 가지에 대한 복사본을 생성할 수 있고, 앱 전환기에서 이들 사이를 토글할 수 있습니다. iPad에서 사용자는 다른 복사본과 함게 앱의 UI 복사본을 양얖으로 표시할 수 있습니다. 앱 UI의 각 복사본의 경우 UI를 화면에 나타내는 윈도우, 뷰, 뷰 컨트롤러 관리를 위한 씬 객체를 사용할 수 있습니다.
사용자가 새로운 씬을 요청하면, UIKit
은 상응하는 씬 객체를 생성하고 초기 설정을 처리합니다. 이렇게 하려면 UIKit
은 제공받은 정보에 의존해야 합니다. 앱은 지원하고자 하는 씬의 타입 및 씬 관리를 위해 사용하는 객체를 선언해야 합니다. 정적으로는 앱의 Info.plist 파일에서 그렇게 할 수 있고, 동적으로는 런타임에서 할 수 있습니다.
Important
씬은 선택이지만 앱 UI의 여러 복사본을 동시에 표시하길 원한다면 씬을 지원해야 합니다.
앱 configuration 설정 업데이트를 통해서 앱은 씬을 명시적으로 선택해야 합니다.
다중 윈도우 옵션을 활성화하면, Xcode는 앱의 Info.plist 파일에 UIApplicationSceneManifest
키를 추가합니다. 이 키의 존재는 시스템에게 앱이 씬을 지원하고 있음을 알려줍니다. 이 키의 값은 초기에 오직 UIApplicationSupportsMultipleScenes
키만을 포함하는 딕셔너리입니다.
UIApplicationSupportsMultipleScenes
키의 값은 시스템에게 앱이 실제로 동시 다중 씬을 지원하는지 여부를 알려줍니다. Xcode는 초기에 이 키의 값을 true
로 설정하지만, 한 번에 오직 하나의 씬만 표시하길 원한다면 이 기능을 비활성화할 수 있습니다. 다중 신 지원은 씬들이 서로 방해하지 않게 만들기 위한 추가적인 작업이 필요합니다. 예를 들어 씬이 같은 공유된 데이터 구조를 사용하는 경우앱 데이터의 통합성을 유지하기 위해 해당 구조에 대한 접근을 조정해줘야 합니다.
UIKit
은 제공받은 정보를 사용해서 앱의 씬 생성을 처리합니다. 이러한 정보를 제공하는 가장 간단한 방법은 앱의 Info.plist 파일에서 아래 작업을 수행하는 것입니다.
UIApplicationSceneManifest
키에 상응합니다. 만약 존재하지 않는다면, Enable Scene Support in Your Project Settings에서 설명한 것처럼 추가합니다.제공된 엔트리에서 씬 세부사항을 채워야 합니다. 대부분의 앱은 오직 메인 씬만 필요합니다. 하지만 여러 씬을 추가할 수 있고 각각을 다르게 설정할 수 있습니다. 예를 들어 노티피케이션 관련 컨텐트를 구체적으로 표시하기 위해 두 번째 씬을 포함시킬 수도 있습니다. UIKit
은 각 씬에 대해 아래 정보를 요구합니다.
UIWindowScene
인 씬의 클래스 이름입니다.UIWindowSceneDelegate
프로토콜을 채택해야 합니다.씬을 설정하는 방법에 대한 더 많은 정보는 UISceneConfigurations
를 살펴보시기 바랍니다.
UISceneConfigurations
https://developer.apple.com/documentation/uikit/uisceneconfiguration
https://velog.io/@panther222128/UISceneConfiguration
스토리보드를 사용해서 씬에 대한 UI를 구체화할 수 있습니다. UISceneStoryboardFile
키에 할당한 스토리보드는 씬을 표시하길 원하는 초기 뷰 컨트롤러를 포함합니다. 씬 객체 생성과 더불어 UIKit
은 자동으로 씬을 위한 윈도우를 생성하고 스토리보드에 있는 초기 뷰 컨트롤러를 해당 스토리보드로부터 설치합니다. UIWindowSceneDelegate
객체의 메소드를 사용해서 코드 작성을 통해 해당 뷰 컨트롤러를 교체할 수 있습니다.
Important
스토리보드에서 초기 뷰 컨트롤러 선언을 잊지 않아야 합니다.UIKit
은 UI 설정 시 이 뷰 컨트롤러의 존재에 의존합니다.
실제로 씬 객체를 생성하기 전에 UIKit
은 씬 관련 세부사항을 바꿀 수 있도록 해주는 메소드인 앱 딜리게이트의 application(_:configurationForConnecting:options:)
메소드를 호출합니다. UIKit
이 제공하는 옵션에 기반해 씬 설정을 조정하기 위해서 이 메소드를 사용할 수 있습니다. 예를 들어 시스템이 씬에 노티피케이션 응답을 전달할 때, 노티피케이션 관련 인터페이스와 함께 다른 스토리보드를 구체화할 수 있습니다.
씬을 동적으로 씬 설정을 구현하지 않는 경우 UIKit
은 씬 생성을 위해 앱의 Info.plist에 있는 정보를 사용합니다.
씬에 대한 지원을 추가하는 것은 생명주기 이벤트에 대한 앱의 응답 방식을 변경합니다. 씬을 갖지 않는 앱에서 앱 딜리게이트 객체는 포어그라운드 혹은 백그라운드로의 전환을 처리합니다. 앱에 씬 지원을 추가하는 경우 UIKit
은 씬 딜리게이트 객체에게 해당 책임을 옮깁니다. 씬 생명주기는 서로 독립이며, 앱 자체와도 상관없이 독립적입니다. 그렇기 때문에 씬 딜리게이트 객체는 전환을 처리해야 합니다.
앱이 iOS 12 또한 지원하는 경우 앱 딜리게이트 및 씬 딜리게이트 객체 사이에서의 생명주기 전환을 처리할 수 있습니다. UIKit
은 오직 하나의 딜리게이트 객체에게만 알려줍니다. iOS 13 및 이후 버전에서 UIKit
은 씬 딜리게이트 객체에게 알려줍니다. iOS 12 및 이전 버전에서 UIKit
은 앱 딜리게이트에게 알려줍니다.
생명주기 이벤트 처리 방법에 대한 더 많은 정보는 Managing Your App's Life Cycle을 살펴보시기 바랍니다.
특정 씬을 생성할 때 사용하는, UIKit의 객체 및 스토리보드에 대한 정보입니다.
https://developer.apple.com/documentation/uikit/uisceneconfiguration
https://velog.io/@panther222128/UISceneConfiguration
앱의 씬 중 한 가지에 대한 정보를 포함하고 있는 객체입니다.
https://developer.apple.com/documentation/uikit/uiscenesession
https://velog.io/@panther222128/UISceneSession