듀다의 성장개발로그

Swift) AppDelegate와 SceneDelegate 본문

카테고리 없음

Swift) AppDelegate와 SceneDelegate

du-da 2021. 4. 12. 16:14

지난 포스팅에서는 SceneDelegate가 포함된 앱 생명주기에 대해 알아봤었는데요

그러면 기존 AppDelegate만 사용하던 방식과는 어떻게 달라진 것인지 살펴보겠습니다.

 

그런데 SceneDelegate는 왜 등장하게 되었을까요?

iOS12까지의 앱은 한 앱에서 한 화면밖에 보여줄 수 없었지만 iOS13부터는 여러 화면을 동시에 보여주는 기능을 지원하게 됩니다.

이런 기능을 지원하기 위해선 하나의 앱에서도 여러 개의 Scene을 가질 수 있어야 했기 때문에 

Scene을 관리하는 SceneDelegate가 새로 등장하게 된 것이지요.

 

iOS 12까지 사용하던 기존의 생명주기는 위와 같은 그림으로 나타낼 수 있습니다. 

현재의 scene-based 방식과 차이점은 앱의 상태에 따라 UI가 변한다는 것입니다.  scene의 attach라는 개념은 없고 현재 실행중인지, 실행중이 아닌지에 따라 상태가 변화합니다. 유저가 앱을 실행하면 Not Running 상태에서 foreground에 Inactive 상태로 곧바로 올라가고 시스템은 이를 active로 바꿔주게 됩니다. 이후에는 앱이 종료되기까지 foreground와 background만을 오가게 됩니다. background지만 아무것도 실행하지 않는 상태가 Suspended인데, 시스템은 Background 상태의 앱을 Suspended상태로 임의로 전환할 수도 있습니다.

 

기존에는 AppDelegate에서 관리하던 UI의 생명주기가

이젠 SceneDelegate에서 관리되며, AppDelegate에서는 Session의 생명주기도 관리하게 되었습니다. 

AppDelegate는 기존에 Process의 생명주기에 더해 Session의 생명주기를 관리하게 되었으며, Session이라는 것은 iOS 13에 추가된 개념이기 때문에 AppDelegate에도 Scene Session을 추가할 때 호출되는 configurationForSession 메소드와 Scene Session이 삭제될 때 호출되는 didDidcardSceneSession가 새로 들어오게 된 것이지요.

 

그리고 UI에 관련된 메소드들은 SceneDelegate로 수행하게 되었습니다. 위 그림처럼 말이죠.

 

오늘 포스팅은 여기서 마무리하겠습니다. 감사합니다.

 

참고자료: developer.apple.com/videos/play/wwdc2019/258/developer.apple.com/documentation/uikit/app_and_environment/managing_your_app_s_life_cycle