Post

Day 32 - TIL

App delegate와 scenedelegate가 무엇인지.

Day 32 - TIL

📘 Day 32 - Today I Learned

🔍 Today’s Error or Issue

오늘 특강을 들으면서 중간에 불쑥 튀어나온 App delegateScene delegate 프로젝트를 생성하면 항상 나오는데 저게 뭔지 궁금해서 찾아보았다!

두가지다 iOS 앱 생명주기에서 앱의 시작부터 종료까지의 흐름을 관리하는 핵심적인 클래스다.

SwiftUI가아닌 UIkit 기반 앱에서 많이 사용되며, iOS 13부터 역할이 나뉘게 되었다고 한다.

App Delegate

AppDelegate는 iOS 앱 전체의 생며주기(Lifecycle)를 관리하는 핵심 클래스다.

  • 앱 실행시 초기설정
  • 푸시 알림 등록처리
  • 앱이 백그라운드/포그라운드로 전환될 때 호출
  • 앱 종료 직전 처리

사용하는 시점으로는 앱 전반적인 설정이나, 상태 관리는 Appdelegate에서 처리한다.

로그시스템 초기화, Firebase 초기화, 푸시 알림 등록 등

1
2
3
4
5
func application(_ application: UIApplication,
                 didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    // 앱 시작 시 초기 설정
    return true
}

Scene Delegate

SceneDelegate는 하나의 화면(UI window)에 대한 생명주기를 관리한다. iOS 13부터 도입되었으며, 멀티 윈도우 특히(iPad)를 지원하기 위해 생긴 구조다.

  • 앱의 UI(윈도우)를 생성하고 표시
  • 뷰 컨트롤러 설정(rootViewController)
  • 화면이 포그라운드/백그라운드로 전환될때 호출

UI 관련 설정이나 루트 뷰 구성은 여기서 한다.

로그인 여부에 따라 Root ViewController 결정 등

1
2
3
4
5
6
7
8
9
func scene(_ scene: UIScene,
           willConnectTo session: UISceneSession,
           options connectionOptions: UIScene.ConnectionOptions) {
    guard let windowScene = (scene as? UIWindowScene) else { return }

    window = UIWindow(windowScene: windowScene)
    window?.rootViewController = MainViewController()
    window?.makeKeyAndVisible()
}

📘 Lesson Learned

이전엔 아무 생각 없이 있던 AppDelegate와 SceneDelegate가 사실은 앱 구조의 핵심이었다.
특히 SceneDelegate는 멀티 화면, 윈도우의 진입점 역할을 하기 때문에
루트 뷰를 설정하거나, 앱 상태 전환 시 처리할 일이 있다면 SceneDelegate에 작성해야 한다는 점을 알게 되었다.

This post is licensed under CC BY 4.0 by the author.