### 1. iOS 13에서 Scene Delegate로 이관된 App Delegate의 역할은 무엇무엇이 있을까요 #### iOS 12(AppDelegate) ![](https://hackmd.io/_uploads/HkH6f7dD2.png) - iOS 12 이전까지는 하나의 앱에 하나의 window - AppDelegate 내에서 App Life Cycle, UI Life Cycle 을 모두 담당함 - 이전에는 앱이 foreground에 들어가거나 background로 이동할 때 앱의 상태를 업데이트하는 등의 앱의 주요 생명 주기 이벤트를 관리했었지만 더이상 하지 않음! #### iOS 13(SceneDelegate) ![](https://hackmd.io/_uploads/SyrCGX_vh.png) - iOS 13 부터는 window 개념이 scene으로 대체 되고 하나의 앱에 여러 scene을 가질수 있게 되었음 - UILifecycle을 더이상 ApplDelegate에서 관리하지 않음, SceneDelegate 가 이를 대체함 - AppDelegate 는 Session Lifecycle 역할을 하게 되었기에 scene session 에 관련된 함수가 추가됨 - 화면에 표시되는 내용(Windows 또는 Scenes)들을 처리하고 앱이 표시되는 방식을 관리 ### 2. App Delegate와 Scene Delegate의 각각의 역할은 무엇일까요? #### iOS 12(AppDelegate) - 앱의 가장 중요한 데이터 구조를 초기화하는 것 - 앱의 scene을 환경설정(Configuration)하는 것 - 앱 밖에서 발생한 알림(배터리 부족, 다운로드 완료 등)에 대응하는 것 - 특정한 scenes, views, view controllers에 한정되지 않고 앱 자체를 타겟하는 이벤트에 대응하는 것. - 애플 푸쉬 알림 서비스와 같이 실행시 요구되는 모든 서비스를 등록하는것. #### iOS 13(SceneDelegate) - 다중 창 환경을 지원하기 위한 역할을 담당 - 앱의 여러 개의 Scene(창)을 관리하고, 각 Scene의 생명주기를 관리 - Scene 간의 데이터 공유를 관리 - 앱이 여러 창에서 동작할 때, 각 창에 적합한 인터페이스를 구성하고 관리 - Scene 간의 전환 및 다른 앱과의 상호작용을 처리 ### 3. Scene의 개념이 생긴 이유는 무엇이고, 언제 어디서 활용해볼 수 있을까요? #### Secene의 개념이 생겨난 이유 - iOS 13부터 iPadOS와 같은 멀티 창 환경을 지원하기 위해서 도입되었음 - 하나의 앱 인스턴스가 하나의 창에서 실행되었지만, 멀티 창 환경에서는 하나의 앱이 여러 개의 창을 가질 수 있음 #### 활용하는 순간 - 멀티태스킹 지원 : 웹 브라우저, 문서 편집기, 사진 편집기 등 다중 창 환경에서 동시에 여러 작업을 수행 가능 - 데이터 공유 및 동기화 : 다중 창 환경에서 데이터 및 상태를 공유해야 하는 앱은 Scene을 활용하여 각 창간에 데이터를 전달하고 동기화 가능 - 예를 들어 메모앱에서 여러창에서 동시에 메모를 작성하거나 편집하는게 가능해 짐 - 사용자 경험 향상 : 멀티 창 환경에서 각 창에 맞는 인터페이스를 제공하는 앱은 Secene을 활용해 사용자 경험을 향상 시킬 수 있음 - 예를 들어 캘린더 앱에서 한 창에는 일정 목록을 다른창에는 일정 세부 정보를 표시할 수 있음 ### 4. 앱은 언제언제 Foreground Inactive 상태가 될까요? 2가지 이상의 사례를 생각해봅시다 - `앱 실행 직후` 처음 앱이 실행되면 Foreground, 즉 사용자와 상호작용이 없는 초기상태에서 시작됩니다. - `알림 수신` Active 상태에서 알림을 수신하면 알림을 처리하는 동안 사용자와의 상호작용이 불필요한 경우 앱이 자동으로 Inactive 상태로 전환됩니다. - `전화 통화` 사용자가 전화 통화 중일 때는, 앱과 상호작용이 불필요하기 때문에 Inactive 상태로 전환하게 됩니다, ### 5. 앱의 상태가 Background로 지속되기 위한 요건은 무엇무엇이 있을까요? - `백그라운드 모드 활성화` 앱의 info.plist 파일에 백그라운드 모드를 활성화해야 백그라운드에서 실행 가능한 추가기능을 이용할 수 있습니다. ex) Location Update - `백그라운드 작업시간 제한 준수` 앱이 백그라운드에서 실행되는 동안 필요한 작업을 수행해야 합니다. ex) Data Update, Networking - `백그라운드 작업 유형에 따른 설정` 시간 제한을 초과하는 경우 앱이 강제 종료가 될 수 있습니다. - `사용자 경험에 영향을 주지 않는 작업에 제한` 백그라운드 작업은 주로 사용자와 상호작용하지 않는 작업에 사용되어야 합니다. ex) Synchronization, Alarm Processing - `배터리 고려` 불필요한 리소스를 최소화하고, 백그라운드 작업이 완료된 후에는 적절한 시기에 앱을 중지시켜야 합니다.