### iOS 13에서 Scene Delegate로 이관된 App Delegate의 역할은 무엇무엇이 있을까요?
iOS 12 및 이전 버전에서는 App Delegate를 사용하여 앱의 주요 UI 수명 주기 이벤트를 관리합니다. 특히 App Delegate의 메서드를 사용하여 앱이 ForeGround에 진입하거나 BackGround으로 이동할 때 앱의 상태를 업데이트합니다.
### App Delegate와 Scene Delegate의 각각의 역할은 무엇일까요?

* App Delegate
* 앱의 중앙 데이터 구조 이니셜라이징
* 앱의 Scenes 구성
* 메모리 부족 경고, 다운로드 완료 알림 등 앱 외부에서 발생하는 알림에 대응
* 앱 자체를 대상으로 하고 앱의 Scenes, views 또는 view controllers에 한정되지 않은 이벤트에 대응
* 시작 시 Apple 푸시 알림 서비스 등 필요한 서비스에 등록
* iOS 13 버전부터 Session Lifecycle 관리
* Scene Delegate
* 인터페이스 상의 수명주기 관리
* Foreground 및 Background 이동시 이벤트 관리
### Scene의 개념이 생긴 이유는 무엇이고, 언제 어디서 활용해볼 수 있을까요?
* ios13이후 window 개념이 scene으로 대체되고 하나의 앱에 여러 scene을 가질수 있게 됨
* UILifecycle을 더이상 ApplDelegate에서 관리하지 않음
* 여러 화면을 동시에 띄워놓고 전환시 발생시키고싶은 이벤트에 대해 활용해볼 수 있을것 같음
* 예시 : iPad의 멀티태스킹으로 여러 앱, 화면을 동시에 볼 수 있음
### 앱은 언제언제 Foreground Inactive 상태가 될까요? 2가지 이상의 사례를 생각해봅시다
* Unattached 상태에서 앱의 UI가 실행되기 전
* 앱 실행할 때
* Foreground Active 상태에서 앱 위에 다른 앱이 실행될 때
* 재난문자, 앱 실행 중 제어센터 스크롤할 때, 네비 앱 사용 중 전화를 받을 때
### 앱의 상태가 Background로 지속되기 위한 요건은 무엇무엇이 있을까요?
iOS는 백그라운드 실행에 엄격한 제한을 둔다. 기본 동작은 사용자가 백그라운드로 이동한 직후 앱을 Suspend하는 것이다. 이 Suspended 상태에서는 프로세스가 코드를 실행하는 것을 방지한다.
그러나, iOS는 특정 사용자 목표를 달성하기 위한 다양한 특수 목적 메커니즘을 제공한다.
* ex) 음악 플레이어를 빌드하는 경우 audio 백그라운드 모드 를 사용하여 사용자가 앱을 백그라운드로 이동한 후에도 계속 재생합니다.
* ex) 타이머 앱을 빌드하는 경우 타이머가 만료되면 로컬 알림 을 사용하여 사용자에게 알립니다
### 참고 문서
* [App Store Review Guidelines 2.5.4](https://developer.apple.com/app-store/review/guidelines/#software-requirements)
* [article - Extending your app’s background execution time](https://developer.apple.com/documentation/uikit/app_and_environment/scenes/preparing_your_ui_to_run_in_the_background/extending_your_app_s_background_execution_time)
* [article - Choosing Background Strategies for Your App](https://developer.apple.com/documentation/backgroundtasks/choosing_background_strategies_for_your_app)