각 Scene 및 초기 사용자 인터페이스를 관리하는 데 사용하는 오브젝트를 포함하여 앱의 Scene에 대해 시스템에 알린다.
Overview
iOS 13 이상에서 사용자는 앱 UI의 여러 개의 복사본을 만들고 앱 전환기(swicher)에서 전환 할 수 있다. iPad에서 사용자는 다른 복사본과 함께 앱 UI 복사본 하나를 나란히 표시 할 수도 있다. 앱 UI의 각 복사본에 대해 Scene 오브젝트를 사용하여 UI를 화면에 표시하는 창, 뷰 및 뷰 컨트롤러를 관리한다.
사용자가 새 scene을 요청하면 UIKit은 해당 scene 오브젝트를 만들고 초기 설정을 처리한다. 이를 위해 UIKit은 사용자가 제공하는 정보에 의존한다. 앱은 지원하는 scene의 유형과 해당 scene을 관리하는 데 사용하는 오브젝트를 선언해야 한다. 앱의 Info.plist 파일에서 정적으로 수행하거나 런타임에 동적으로 수행 할 수 있다.
중요
scene을 opt in 해도, 앱 UI의 여러 복사본을 동시에 표시하려면 scene을 지원해야 한다.
Enable Scene Support in Your Project Settings
앱은 앱의 설정을 업데이트하여 scene을 명시적으로 선택해야 한다.
- Xcode 프로젝트를 연다.
- app target의 General setting으로 이동한다.
- Deployment Info 섹션에서 Supports multiple windows를 활성화 한다.
다중 창 옵션을 활성화하면 Xcode는 UIApplicationSceneManifest 키를 앱의 Info.plist 파일에 추가한다. 이 키가 있으면 앱이 scene을 지원함을 시스템에 알린다. 이 키의 값은 처음에 UIApplicationSupportsMultipleScenes 키만 포함된 Dictionary이다.
UIApplicationSupportsMultipleScenes 키의 값은 앱이 실제로 여러 동시 scene을 지원하는지 여부를 시스템에 알려준다. Xcode는 처음에 이 키의 값을 true로 설정하지만 한 번에 하나의 scene만 표시하려는 경우 기능을 비활성화 할 수 있다. 여러 scene을 지원하려면 scene이 서로 간섭하지 않도록 추가 작업이 필요하다. 예를 들어 scene에서 동일한 공유 데이터 구조를 사용하는 경우 해당 구조에 대한 액세스를 조정하여 앱 데이터의 무결성을 유지해야 한다.
Configure the Details for Each Scene
UIKit은 사용자가 제공 한 정보를 사용하여 앱의 scene 생성을 처리한다. 이 정보를 제공하는 가장 간단한 방법은 앱의 Info.plist 파일에 있다.
- Xcode 프로젝트를 열고 Info.plist 파일을 선택한다.
- Application Scene Manifest 항목의 플러스(+) 버튼을 클릭한다. 이 항목은 UIApplicationSceneManifest 키에 해당된다. 존재하지 않는 경우 프로젝트 설정에서 Enable Scene Support in Your Project Settings에서 설명 한대로 추가한다.
- 나타나는 메뉴에서 Scene Configuration을 선택한다.
- Scene Configuration 항목에서 플러스(+) 버튼을 클릭한다.
- Application Session Role을 선택하여 앱에 main scene을 추가한다.
- 제공된 항목에 scene details 정보를 입력하시오.
대부분의 앱에는 하나의 main scene만 필요하지만 여러 scene을 추가하고 각각 다르게 설정 할 수 있다. 예를 들어 notification-related content를 표시하기 위해 특별히 두 번째 scene을 포함 할 수 있다. UIKit에는 각 scene에 대해 다음 정보가 필요하다.
- Scene의 클래스 이름은 UIWindowScene이다.
- 앱에서 Scene을 관리하는 데 사용하는 custom delegate object의 클래스 이름이다. 클래스는 UIWindowSceneDelegate 프로토콜을 채택해야 한다.
- 앱이 내부적으로 Scene을 식별하는 데 사용하는 고유한 이름이다.
- Scene의 초기 UI가 포함 된 스토리보드의 이름이다. .storyboard 확장자 없이 이름을 지정하시오.
Scene을 설정하는 방법에 대한 자세한 내용은 UISceneConfiguration을 참조하시요.
Create the Interface for Your Scene
스토리보드를 사용하여 Scene의 UI를 지정한다. UISceneStoryboardFile 키에 할당한 스토리보드에는 Scene에 대해 표시할 초기 뷰 컨트롤러가 포함되어 있다. Scene Object를 만드는 것 외에도 UIKit은 Scene에 대한 창을 자동으로 만들고 스토리보드에서 초기 뷰 컨트롤러를 설치한다. UIWindowSceneDelegate 오브젝트의 메서드를 사용하여 프로그래밍 방식으로 해당 뷰 컨트롤러를 바꿀 수 있다.
중요
스토리보드에서 초기 뷰 컨트롤러를 지정하는 것을 잊지 마시오. UIKit은 UI를 구성할 때 이 뷰 컨트롤러의 존재 여부에 따라 달라진다.
Change Your Scene’s Configuration Dynamically
Scene object를 만들기 전에 UIKit는 Scene 관련 세부 정보를 설명 수 있도록 app delegate의 application(_:configurationForConnecting:options:) 메서드를 호출한다. 이 메서드를 사용하여 UIKit에서 제공하는 옵션에 따라 Scene 구성을 조정할 수 있다. 예를 들어 시스템이 notification response를 Scene에 전달할 때 notification-related interface를 사용하여 다른 스토리보드를 지정할 수 있다.
Scene 구성을 동적으로 구현하지 않는 경우 UIKit은 앱의 Info.plist 파일에 있는 정보를 사용하여 Scene을 만든다.
Adopt Scene-Based Life-Cycle Semantics
Scene에 대한 지원을 추가하면 앱이 라이프 사이클 이벤트에 응답하는 방식이 변경된다. Scene이 없는 앱에서 app delegate object는 포어그라운드 또는 백그라운드로의 전환을 처리한다. 앱에 Scene 지원을 추가하면 UIKit이 해당 책임을 scene delegate object로 이동한다. Scene 라이프 사이클은 서로 독립적이고 앱 자체와 독립적이므로 Scene delegate object가 전환을 처리해야 한다.
앱에서 iOS 12도 지원하는 경우 App delegate와 scene delegate object 모두에서 라이프 사이클 전환을 처리할 수 있다. UIKit는 하나의 delegate object에만 notify를 한다. iOS 13 이상에서는 UIKit가 Scene delegate object에 알린다. iOS 12 이하에서는 UIKit가 App delegate에게 알린다.
라이프 사이클 이벤트를 처리하는 방법에 대한 자세한 내용은 Managing Your App's Life Cycle를 참조하시오.
[원문]
Apple Developer Documentation
developer.apple.com
'프로그래밍 > iOS' 카테고리의 다른 글
Preparing Your UI to Run in the Background (0) | 2020.12.31 |
---|---|
Preparing Your UI to Run in the Foreground (0) | 2020.12.31 |
Managing Your App's Life Cycle (0) | 2020.12.31 |
Concurrency Programming Guide (6) - Migrating Away from Threads (0) | 2020.12.27 |
Concurrency Programming Guide (5) - Dispatch Sources (0) | 2020.12.26 |