k-coding

Scene Delegate , App Delegate 본문

iOS/iOS

Scene Delegate , App Delegate

chkhn_oiiu 2022. 5. 29. 14:57

Scene Delegate , App Delegate

 

 

오늘은 UIKit에서 프로젝트를 처음 생성하면 제일 상단에 자동 생성되는 swift 파일인

 

 

요 두 파일 AppDelegate와 SceneDelegate에 대하여 알아보겠습니다.

 

Scene Delegate이라는 개념자체가 iOS 13이후로 생긴것으로

 

그 전에는 AppDelegate가 큰 범위로 Process LifeCycle과 UI LifeCycle을 모두 관리하였는데요.

 

때문에 하나의 앱에 하나의 window를 가졌지만,

 

Apple WWDC 2019

iOS13 이후로는 AppDelegate가 관리하던 UI LifeCycle을 SceneDelegate가 관리하게 되었습니다.

 

이렇게 바뀜으로 인해서 하나의 앱에서 여러개의 Scene을 분할해서 볼 수 있게 되었습니다.

 

apple 공식 문서

근데 2가지로 분리 된것 말고도 AppDelegate에 Session LifeCycle라는게 새로 생겼습니다.

 

이건 무엇일까요 ? Session LifeCycle 은 Scene LifeCycle과 같은 것으로

 

Scene Delegate에서 Scene Session이 생성되거나 삭제될 때, AppDelegate에 보고하게 됩니다.

 

 

Scene이란?

 

Apple Developoer Document를 참고하자면 

 

Scene에 대해서 아래와 같이 설명하고있습니다.

 

더보기

"

UIKit는 UIWindowScene 객체를 사용하는 앱 UI의 각 인스턴스를 관리합니다. 

Scene에는 UI의 하나의 인스턴스를 나타내는 windows와 view controllers가 들어있습니다. 

또한 각 scene에 해당하는 UIWindowSceneDelegate 객체를 가지고 있고,

이 객체는 UIKit와 앱 간의 상호 작용을 조정하는 데 사용합니다.

Scene들은 같은 메모리와 앱 프로세스 공간을 공유하면서 서로 동시에 실행됩니다. 

결과적으로 하나의 앱은 여러 scene과 scene delegate 객체를 동시에 활성화할 수 있습니다.

"

 

기존 AppDelegate의 UI LifeCycle에서 담당했던 역할을 SceneDelegate가 하게 되면서

 

AppDelegate에서 Scene Session을 통하여 Scene에 대한 업데이트 정보를 받게 됩니다.

 

Scene Session 이란?

더보기

"

UISceneSession 객체는 scene의 고유의 런타임 인스턴스를 관리합니다.

사용자가 앱에 새로운 scene을 추가하거나 프로그래밍적으로 scene을 요청하면,

시스탬은 그 scene을 추적하는 session 객체를 생성합니다. 

그 session에는 고유한 식별자와 scene의 구성 세부사항(configuration details)가 들어있습니다.

UIKit는 session 정보를 그 scene 자체의 생애(life time)동안 유지하고

app switcher에서 사용자가 그 scene을 클로징하는 것에 대응하여 그 session을 파괴합니다.

session 객체는 직접 생성하지않고 UIKit가 앱의 사용자 인터페이스에 대응하여 생성합니다.

또한 위 3번에서 소개한 두 메소드를 통해서 UIKit에 새로운 scene과 session을 프로그래밍적 방식으로 생성할 수 있습니다.

"

 

 

Scene 동기화

 

기존의 Scene을 동기화 시키는 방법에는 

 

ViewController가 View에서의 움직임을 감지하고 Model Controller에게 전달했다면

 

 

지금은 ViewController가 감지하고 Model Controller에 전달하는것은 같지만, 

 

Model Controller가 또 다른 View Controller에게도 View update 소식을 전달합니다.

 

 

 

iOS13 이후로 바뀐 AppDelegate의  역할

 

iOS12 이전에는 앱이 foreground, background 상태일 때 앱의 상태를 업데이트 하는 등 

 

주요 LifeCycle을 관리했었지만, 더이상 이 부분을 담당하지않고

 

  • 앱의 가장 중요한 데이터 구조를 초기화하는 것
  • 앱의 scene을 환경설정(Configuration)하는 것
  • 앱 밖에서 발생한 알림(배터리 부족, 다운로드 완료 등)에 대응하는 것
  • 특정한 scenes, views, view controllers에 한정되지 않고 앱 자체를 타겟하는 이벤트에 대응하는 것.
  • 애플 푸쉬 알림 서브스와 같이 실행시 요구되는 모든 서비스를 등록하는것.

 

등의 일을 담당합니다.

 

 

Comments