본문 바로가기
iOS/iOS

SceneDelegate란?

by 황민우 2022. 2. 21.

SceneDelegate

- iOS 13부터 SceneDelegate가 AppDelegate의 일부 역할을 담당합니다.

- iOS 12까지는 하나의 앱에 하나의 Window가 있는 개념이었지만,

  iOS 13부터는 Window의 개념이Scene으로 대체되고 하나의 App(iPad)에서 여러 개의 Scene을 가질 수 있습니다.

- 또한 iOS 12에서 UIApplicationDelegate의 기능을 iOS 13부터는 UISceneDelegate가 수행하게 되었습니다.

  (UILifeCycle에 대한 부분을 UISceneDelegate가 수행합니다.)


SceneDelegate 함수

- 다음은 SceneDelegate에 있는 함수들입니다.

 

scene(_ : willConnectTo : options :)

= Scene이 앱에 추가될 때 호출됩니다.

 

sceneDidDisconnect(_:)

= Scene에 연결이 해제될 때 호출됩니다.

 

sceneDidBecomeActive(_:)

= App switcher에서 선택되는 등 Scene과 상호작용이 시작될 때 호출됩니다.

(App switcher는 홈 버튼을 두번 누르거나, 화면의 하단에서 위로 스와이프 했을 때 현재 실행 중인 앱이 보이는 화면)

 

sceneWillResignActive(_:)

= 사용자가 Scene과의 상호작용을 중지할 때 호출됩니다.(다른 화면으로의 전환)

 

sceneWillEnterForeground(_:)

= Scene이 Foreground로 진입할 때 호출됩니다.

 

sceneDidEnterBackground(_:)

= Scene이 Background로 진입할 때 호출됩니다.


Scene-Based Life-Cycle

- iOS 13버전 부터는 LifeCycle이 Scene-Based Life-Cycle로 바뀌었습니다.

 

 

Unattached state

- 사용자나 시스템이 앱에 대해서 새로운 scene을 요청하게 되면, UIKit이 scene을 Unattached 상태로 만듭니다.

- 사용자의 요청에 따라 scene을 Foreground Inactive를 거쳐 Foreground Active로 보내줍니다.

- 시스템이 scene을 요청할 때는 바로 Background로 보냅니다.

  (=시스템이 사용하는 scene은 거의 Background에서 작업이 수행되기 때문입니다.)

- scene이 사용되지 않으면 Background나 Suspended 상태로 넘어갑니다.

- UIKit은 Background나 Suspended 상태인 scene을 언제든지 다시 Unattached 상태로 보낼 수 있습니다.

 

Foreground

- Inactive : 앱이 실행 중이지만 이벤트를 받지 않는 상태, Active 상태로 넘어가기 전에 앱은 반드시 거치는 상태,

              알림 같은 알림창이 화면을 덮어 앱이 이벤트를 받지 못하는 상태

- Active : 앱이 실행 중이며 이벤트를 받을 수 있는 상태, Foreground 앱의 일반적인 상태

 

Background

- 앱 사용 중에 다른 앱을 실행하거나 홈 화면으로 나갔을 때 상태

- 백그라운드에서 동작하는 코드를 추가하면 suspended상태로 넘어가지 않고 백그라운드 상태를 유지

- 처음부터 background 상태로 실행되는 앱은 inactive 대신 background 상태로 진입

- ex) 음악을 실행하고 홈 화면으로 나가도 음악이 나오는 상태

 

Suspend

- 앱이 background 상태에서 추가적인 작업을 하지 않으면 곧바로 suspended 상태로 진입

- 앱을 다시 실행할 경우 빠른 실행을 위해 메모리에 올라가 있음

- 메모리가 부족한 상황이 되면 iOS는 suspende 상태에 있는 앱들을 메모리에서 해제

 


AppDelegate.Swift

- AppDelegate.swift파일의 UILifeCycle의 기능을 SceneDelegate.swift파일이 수행합니다.

- Session Lifecycle에 대한 역할이 추가되었습니다.

    • Scene Session이 생성되거나 삭제될 때, AppDelegate에 알리는 메서드 추가

    • Scene Session은 앱에서 생성한 모든 scene의 정보를 관리합니다.

 

다음은 AppDelegate가 하는 일입니다.

1, 앱의 중요한 데이터 초기화

2, 앱의 scene을 환경설정

3, 앱 밖에서 발생한 알림(배터리 부족, 다운로드 완료, 등,,)에 대응

4, 특정한 scenes, views, view controllers에 한정되지 않고 앱 자체 타겟 이벤트에 대응

5, 푸시 알림 서비스 같은 실행 시 요구되는 서비스 등록


내용 출처

https://www.youtube.com/watch?v=fvF2K8mi-Bc 

https://lena-chamna.netlify.app/post/appdelegate_and_scenedelegate/

 

[iOS] AppDelegate와 SceneDelegate

iOS 13 이후 AppDelegate와 SceneDelegate

lena-chamna.netlify.app

https://zetal.tistory.com/entry/swiftUI-%ED%8A%9C%ED%86%A0%EB%A6%AC%EC%96%BC2-SceneDelegate

 

SceneDelegate란

SceneDelegate란 SceneDelegate을 살펴보겠습니다. Xcode 11부터 SceneDelegate가 기본 iOS 앱 프로젝트 템플릿으로 자동 추가됩니다. SceneDelegate은 swiftUI에만 속해있는 것은 아닙니다. iOS 13 이상에서는..

zetal.tistory.com

https://developer.apple.com/documentation/uikit/app_and_environment/managing_your_app_s_life_cycle

 

Apple Developer Documentation

 

developer.apple.com

 

'iOS > iOS' 카테고리의 다른 글

as, as?, as!의 차이  (0) 2022.02.24
Escaping Closure  (0) 2022.02.23
ARC [ Automatic Reference Counting ]  (0) 2022.02.22
ViewController 생명주기  (0) 2022.02.19
App Life Cycle [ 앱 생명주기 ]  (0) 2022.02.18

댓글