---
# System prepended metadata

title: Untitled

---

### 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
- `배터리 고려`
불필요한 리소스를 최소화하고, 백그라운드 작업이 완료된 후에는 적절한 시기에 앱을 중지시켜야 합니다.