iPad에서 Multiple Windows 다중 창 지원 - (1)
WWDC 19에서 소개된 내용입니다. iPad에서 Multiple Windows를 지원한다는 소식입니다. 기존에는 하나의 앱은 하나의 창만 쓸 수 있었습니다. 분할 창을 쓴다고 해도 다른 앱을 사용해야 했습니다. (예를 들면, 카카오톡 + 사파리, 메모 + 사파리 처럼 서로 다른 어플)
이번 iPad 13이 나오면서 Scene 이라는 개념이 등장했습니다.
Xcode 11버전에서 프로젝트를 생성하면 Scene Delegate라는 것이 생성됩니다. 기존에는 App Delegate만 있었는데 이제는 App Delegate와 Scene Delegate가 모두 생기게 됩니다.
iPad OS 13이상에서 사용자는 앱 UI의 여러 인스턴스를 동시에 만들고 관리할 수 있으며, app switcher를 사용하여 서로 전환 할 수 있게 되었습니다. UI(User Interface)의 각 인스턴스는 다른 컨텐츠를 표시하거나, 동일한 컨텐츠를 다른 방식으로 표시합니다.
위 그림을 보면 iOS 12까지는 App Delegate에 Process Life Cycle과 UI Life Cycle이 있었습니다. Process Life Cycle은 어플리케이션이 실행되었는지 종료되었는지 알 수 있는 부분이고 UI Life Cycle은 현재 Foreground에 나와있는지 비활성화 되어있는지 등의 State를 관리하는 부분입니다. 이렇듯 App Delegate에서 모두 관리를 하는 방식이었습니다.
우리가 흔히 사용하던 App Delegate 코드였습니다. 하나의 앱은 1개의 프로세스와 1개의 UI를 가지고 있기 때문입니다.
하.지.만, iOS 13부터는 다릅니다. 1개의 프로세스인 것은 동일하지만 여러 개의 UI를 가질 수 있게 됩니다.
이렇게 각각 다른 앱이 실행이 되었다고 한다면, 아래 그림과 같이 하나의 앱이 여러 개의 세션으로 분리된다는 것입니다.
위와 같이 된다면 각 UI에 대한 관리는 어떻게 이루어 질까요? 아래 그림을 살펴보면 다음과 같습니다.
App Delegate가 모두 담당했던 것이 이제는 UI에 대해서 Delegate가 분리되었습니다.
App Delegate 1개가 App Delegate와 Scene Delegate로 분리된 것입니다. UI에 대해서는 역할을 위임했다고 보면 될 것 같습니다.
즉, 우리가 AppDelegate에서 했던 UI setup / teardown 작업들을 SceneDelegate로 마이그레이션 해야한다는 뜻입니다.
아래 그림을 보시면 원래 App Delegate에 있어야 하는 메소드들이 사라지고 SceneDelegate로 옮겨진 것을 알 수 있습니다.
지금 우리가 본 변경된 AppDelegate가 가지는 책임말고도 AppDelegate가 가지는 또 다른 책임이 있는데, Session Lifecycle입니다.
이제 새로운 Scene Session이 생성되거나, 기존 Scene Session이 삭제될 때 시스템이 AppDelegate에게 알리게 됩니다.