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/
https://zetal.tistory.com/entry/swiftUI-%ED%8A%9C%ED%86%A0%EB%A6%AC%EC%96%BC2-SceneDelegate
https://developer.apple.com/documentation/uikit/app_and_environment/managing_your_app_s_life_cycle
'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 |
댓글