티스토리 뷰

반응형

iOS 앱 초기설정, AppDelegate 역할 및 생애주기 정리

iOS 앱의 루트 뷰 지정과 앱 딥링크 실행 외에도 핵심적으로 전반적인 생애주기를 관리할 수 있는 AppDelegate에서는 앱의 상태 변화에 따라 호출되는 다양한 메서드가 정의되어 있습니다.

iOS 13 이후 멀티 윈도우 개념이 생기면서 SceneDelegate가 추가되었지만, 그 이후에도 앱 전체 수준의 이벤트를 다루는 역할은 여전히 AppDelegate가 담당하고 있습니다.

아래 소개하는 생애주기 메서드들은 필수 구현이 아니며, 필요에 따라 선택적으로 정의해 사용할 수 있습니다. AppDelegate의 생애주기 메서드를 활용하면 앱의 원하는 시점에 맞게 다양한 동작을 수행할 수 있습니다.


willFinishLaunchingWithOptions

func application(
    _ application: UIApplication,
    willFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil
) -> Bool {
    // do something
    return true
}

willFinishLaunchingWithOptions는 앱이 완전히 실행되기 직전에 호출됩니다.
이 시점은 UI가 표시되기 전 단계이기 때문에 UI 세팅보다는 초기 설정에 적합한 시점입니다.
앱의 설정값을 불러오거나, 의존성 주입 등 기본적인 세팅을 처리할 때 활용할 수 있습니다.
true를 반환해야 앱 실행이 이어지며, 실행 시 초기 1회만 호출됩니다.


didFinishLaunchingWithOptions

func application(
    _ application: UIApplication,
    didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? = nil
) -> Bool {
    return true
}

didFinishLaunchingWithOptions는 앱 실행 준비를 모두 마치고, 첫 화면이 표시되기 직전에 호출됩니다.
앱 전반에서 필요한 Logger, Firebase Crashlytics, APNS Push 등의 초기 설정 작업을 이 시점에 수행합니다.
보통 rootViewController 초기화도 이 단계에서 이뤄집니다.
true를 반환하면 다음 단계로 실행이 이어지며, 미구현 시 기본적으로 true가 반환됩니다.
실행 시 초기 1회만 호출됩니다.


applicationDidBecomeActive

func applicationDidBecomeActive(_ application: UIApplication) {
    // do something
}

앱이 사용자와 상호작용 가능한 상태가 되면 호출됩니다.
백그라운드에 있다가 포어그라운드로 돌아와 상호작용할 준비가 되면 실행되며,
앱 실행 초기에 didFinishLaunchingWithOptions 이후에도 이어서 호출됩니다.

다른 앱의 음악을 듣다가 본 앱으로 복귀했을 때 오디오 세팅을 조정하거나,
일시정지된 애니메이션을 재개하는 등 앱 활성화 이후 처리 로직에 활용됩니다.


applicationWillResignActive

func applicationWillResignActive(_ application: UIApplication) {
    // 앱이 활성 상태를 잃기 직전에 호출됩니다.
    // 홈 버튼 누름, 알림창 등장, 전화 수신 등으로 일시 중단되기 전 단계입니다.
}

포어그라운드에서 active → inactive 상태로 전환되기 직전에 호출됩니다.
전화가 오거나, 알림창이 뜨거나, 홈 화면으로 이동하는 등 일시적인 중단 상황에서 실행됩니다.

이 시점에는 불필요한 작업을 잠시 중단하거나, 데이터 저장 및 정리 등 일시중단 전 처리를 수행하기에 적합합니다.


applicationDidEnterBackground

func applicationDidEnterBackground(_ application: UIApplication) {
    // 앱이 백그라운드로 진입했을 때 호출됩니다.
    // 데이터 저장이나 네트워크 세션 종료 등의 작업을 수행합니다.
}

didEnterBackground는 사용자가 홈 화면으로 이동하거나,
다른 앱으로 전환해 앱이 백그라운드 상태가 되었을 때 호출됩니다.
이 시점에 백그라운드에서 필요한 작업이나, 사용자 데이터 저장, 세션 종료 등을 처리할 수 있습니다.


applicationWillTerminate

func applicationWillTerminate(_ application: UIApplication) {
    // 앱이 완전히 종료되기 직전 호출됩니다.
    // 단, 백그라운드 상태에서 시스템이 앱을 강제 종료할 경우엔 호출되지 않습니다.
}

willTerminate는 앱이 정상적으로 종료되기 직전 호출됩니다.
앱이 강제로 종료될 때는 호출되지 않으며, 종료 전 필요한 작업을 수행할 수 있는 마지막 단계입니다.
예를 들어, 앱 종료 직전에 저장해야 하는 데이터나 로그 처리를 담당할 수 있습니다.


앱 실행 후 바로 종료 시 호출 순서

앱을 실행했다가 바로 종료하면 일반적으로 아래 순서대로 메서드들이 호출됩니다.
메서드 이름만 봐도, 흐름이 자연스럽게 이어지는 것을 확인할 수 있습니다.

// 앱 실행 및 종료 시의 일반적인 호출 순서
willFinishLaunchingWithOptions
→ didFinishLaunchingWithOptions
→ applicationDidBecomeActive
→ applicationWillResignActive
→ applicationDidEnterBackground
→ applicationWillTerminate

앱 실행 후, 바로 홈화면으로 복귀 시 호출 메서드 예시

앱 실행 후, 홈화면 복귀 시 호출되는 AppDelegate 생애주기메서드 예시입니다.


iOS13 이후 추가된 SceneDelegate

iOS 13 이후 아이패드 등에서 멀티 윈도우 개념이 도입되면서 SceneDelegate가 추가되었습니다.
이에 따라 일부 역할이 SceneDelegate로 분리되었지만,
앱 전반적인 관리는 여전히 AppDelegate가 담당합니다.

멀티 윈도우 기능이 필요하지 않은 일반적인 앱에서는
SceneDelegate 없이 AppDelegate만으로도 충분히 서비스 개발이 가능합니다.


마무리

오늘은 앱의 전반적인 생애주기를 관리하는 AppDelegate의 역할과 주요 메서드들을 정리해봤습니다.
앱이 실행되고 종료되는 전체 흐름을 이해하면,
상태 변화에 따라 어떤 시점에 어떤 처리를 해야 하는지 명확하게 판단할 수 있습니다.

다음에는 SceneDelegate 중심으로 화면 단위 생애주기에 대해 정리해보겠습니다. 감사합니다! 👍

반응형
댓글
반응형
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/10   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함