Specifying the Scenes Your App Supports

Panther·2021년 8월 15일
0

https://developer.apple.com/documentation/uikit/app_and_environment/scenes/specifying_the_scenes_your_app_supports

"Tell the system about your app’s scenes, including the objects you use to manage each scene and its initial user interface."

각 씬 및 씬의 초기 UI를 관리하기 위해 사용하는 객체를 포함해 앱의 씬에 대해서 시스템에게 알려줍니다.

Overview

iOS 13 및 이후 버전에서 사용자는 앱의 UI 여러 가지에 대한 복사본을 생성할 수 있고, 앱 전환기에서 이들 사이를 토글할 수 있습니다. iPad에서 사용자는 다른 복사본과 함게 앱의 UI 복사본을 양얖으로 표시할 수 있습니다. 앱 UI의 각 복사본의 경우 UI를 화면에 나타내는 윈도우, 뷰, 뷰 컨트롤러 관리를 위한 씬 객체를 사용할 수 있습니다.

사용자가 새로운 씬을 요청하면, UIKit은 상응하는 씬 객체를 생성하고 초기 설정을 처리합니다. 이렇게 하려면 UIKit은 제공받은 정보에 의존해야 합니다. 앱은 지원하고자 하는 씬의 타입 및 씬 관리를 위해 사용하는 객체를 선언해야 합니다. 정적으로는 앱의 Info.plist 파일에서 그렇게 할 수 있고, 동적으로는 런타임에서 할 수 있습니다.

Important
씬은 선택이지만 앱 UI의 여러 복사본을 동시에 표시하길 원한다면 씬을 지원해야 합니다.

Enable Scene Support in Your Project Settings

앱 configuration 설정 업데이트를 통해서 앱은 씬을 명시적으로 선택해야 합니다.

  • Xcode 프로젝트를 엽니다.
  • 앱 티갓에서 일반 설정을 탐색합니다.
  • Deployment Info에 있는 "Supports multiple windows" 체크박스를 활성화합니다.

다중 윈도우 옵션을 활성화하면, Xcode는 앱의 Info.plist 파일에 UIApplicationSceneManifest 키를 추가합니다. 이 키의 존재는 시스템에게 앱이 씬을 지원하고 있음을 알려줍니다. 이 키의 값은 초기에 오직 UIApplicationSupportsMultipleScenes 키만을 포함하는 딕셔너리입니다.

UIApplicationSupportsMultipleScenes 키의 값은 시스템에게 앱이 실제로 동시 다중 씬을 지원하는지 여부를 알려줍니다. Xcode는 초기에 이 키의 값을 true로 설정하지만, 한 번에 오직 하나의 씬만 표시하길 원한다면 이 기능을 비활성화할 수 있습니다. 다중 신 지원은 씬들이 서로 방해하지 않게 만들기 위한 추가적인 작업이 필요합니다. 예를 들어 씬이 같은 공유된 데이터 구조를 사용하는 경우앱 데이터의 통합성을 유지하기 위해 해당 구조에 대한 접근을 조정해줘야 합니다.

Configure the Details for Each Scene

UIKit은 제공받은 정보를 사용해서 앱의 씬 생성을 처리합니다. 이러한 정보를 제공하는 가장 간단한 방법은 앱의 Info.plist 파일에서 아래 작업을 수행하는 것입니다.

  1. Xcode 프로젝트를 열고 Info.pliast 파일을 선택합니다.
  2. 애플리케이션 씬의 플러스 버튼을 클릭합니다.
  3. 엔트리를 나타나게 합니다. 이 엔트리는 UIApplicationSceneManifest 키에 상응합니다. 만약 존재하지 않는다면, Enable Scene Support in Your Project Settings에서 설명한 것처럼 추가합니다.
  4. 나타나는 메뉴로부터 씬 설정을 선택합니다.
  5. 씬 설정 엔트리에서 플러스 버튼을 클릭합니다.
  6. 앱에 메인 씬을 추가하기 위해 애플리케이션 세션 역할을 선택합니다.

제공된 엔트리에서 씬 세부사항을 채워야 합니다. 대부분의 앱은 오직 메인 씬만 필요합니다. 하지만 여러 씬을 추가할 수 있고 각각을 다르게 설정할 수 있습니다. 예를 들어 노티피케이션 관련 컨텐트를 구체적으로 표시하기 위해 두 번째 씬을 포함시킬 수도 있습니다. UIKit은 각 씬에 대해 아래 정보를 요구합니다.

  • UIWindowScene인 씬의 클래스 이름입니다.
  • 씬을 관리하기 위해 사용하는 커스텀 딜리게이트 객체의 클래스 이름입니다. 클래스는 UIWindowSceneDelegate 프로토콜을 채택해야 합니다.
  • 내부적으로 씬을 식별하기 위해서 앱이 사용하는 고유한 이름입니다.
  • 씬의 초기 UI를 포함하고 있는 스토리보드의 이름입니다. 파일 이름 확장자에 .storyboard가 없는 이름을 구체화해야 합니다.

씬을 설정하는 방법에 대한 더 많은 정보는 UISceneConfigurations를 살펴보시기 바랍니다.

UISceneConfigurations
https://developer.apple.com/documentation/uikit/uisceneconfiguration
https://velog.io/@panther222128/UISceneConfiguration

Create the Interface for Your Scene

스토리보드를 사용해서 씬에 대한 UI를 구체화할 수 있습니다. UISceneStoryboardFile 키에 할당한 스토리보드는 씬을 표시하길 원하는 초기 뷰 컨트롤러를 포함합니다. 씬 객체 생성과 더불어 UIKit은 자동으로 씬을 위한 윈도우를 생성하고 스토리보드에 있는 초기 뷰 컨트롤러를 해당 스토리보드로부터 설치합니다. UIWindowSceneDelegate 객체의 메소드를 사용해서 코드 작성을 통해 해당 뷰 컨트롤러를 교체할 수 있습니다.

Important
스토리보드에서 초기 뷰 컨트롤러 선언을 잊지 않아야 합니다. UIKit은 UI 설정 시 이 뷰 컨트롤러의 존재에 의존합니다.

Change Your Scene’s Configuration Dynamically

실제로 씬 객체를 생성하기 전에 UIKit은 씬 관련 세부사항을 바꿀 수 있도록 해주는 메소드인 앱 딜리게이트의 application(_:configurationForConnecting:options:) 메소드를 호출합니다. UIKit이 제공하는 옵션에 기반해 씬 설정을 조정하기 위해서 이 메소드를 사용할 수 있습니다. 예를 들어 시스템이 씬에 노티피케이션 응답을 전달할 때, 노티피케이션 관련 인터페이스와 함께 다른 스토리보드를 구체화할 수 있습니다.

씬을 동적으로 씬 설정을 구현하지 않는 경우 UIKit은 씬 생성을 위해 앱의 Info.plist에 있는 정보를 사용합니다.

Adopt Scene-Based Life-Cycle Semantics

씬에 대한 지원을 추가하는 것은 생명주기 이벤트에 대한 앱의 응답 방식을 변경합니다. 씬을 갖지 않는 앱에서 앱 딜리게이트 객체는 포어그라운드 혹은 백그라운드로의 전환을 처리합니다. 앱에 씬 지원을 추가하는 경우 UIKit은 씬 딜리게이트 객체에게 해당 책임을 옮깁니다. 씬 생명주기는 서로 독립이며, 앱 자체와도 상관없이 독립적입니다. 그렇기 때문에 씬 딜리게이트 객체는 전환을 처리해야 합니다.

앱이 iOS 12 또한 지원하는 경우 앱 딜리게이트 및 씬 딜리게이트 객체 사이에서의 생명주기 전환을 처리할 수 있습니다. UIKit은 오직 하나의 딜리게이트 객체에게만 알려줍니다. iOS 13 및 이후 버전에서 UIKit은 씬 딜리게이트 객체에게 알려줍니다. iOS 12 및 이전 버전에서 UIKit은 앱 딜리게이트에게 알려줍니다.

생명주기 이벤트 처리 방법에 대한 더 많은 정보는 Managing Your App's Life Cycle을 살펴보시기 바랍니다.

See Also


Configuration

UISceneConfiguration

특정 씬을 생성할 때 사용하는, UIKit의 객체 및 스토리보드에 대한 정보입니다.

https://developer.apple.com/documentation/uikit/uisceneconfiguration
https://velog.io/@panther222128/UISceneConfiguration

UISceneSession

앱의 씬 중 한 가지에 대한 정보를 포함하고 있는 객체입니다.

https://developer.apple.com/documentation/uikit/uiscenesession
https://velog.io/@panther222128/UISceneSession


0개의 댓글