티스토리 뷰
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
중심으로 화면 단위 생애주기에 대해 정리해보겠습니다. 감사합니다! 👍
'iOS 개발 > iOS 개발 팁' 카테고리의 다른 글
iOS 개발, Cocoa Touch 개념 및 UIKit, Foundation과의 관계 (0) | 2025.10.10 |
---|---|
iOS26 개발, 시뮬레이터 테스트 위한 Xcode26 설치 방법 (0) | 2025.09.26 |
App Store Connect 애플 개발자 계정 비밀번호 변경하는 방법 (0) | 2025.09.06 |
iOS Xcode16 WebKit, nw_proxy_config_t 컴파일 에러 수정방법 feat. chatGPT (0) | 2025.06.15 |
iOS 중복 이벤트 방지 방법, Timer와 closure로 throttle event 구현방법 (0) | 2025.05.23 |
- Total
- Today
- Yesterday
- 백준swift
- Swift 알고리즘
- 부스트코스
- 개발자문서
- Protocol
- 프로그래머스
- Collection
- 프로그래머스swift
- swift 기초
- 백준알고리즘
- 김프매매
- 자연어처리
- swift
- uikit
- 프로토콜
- swift문제
- ios
- 알고리즘문제
- swift string
- 스위프트
- SwiftUI
- swift언어
- swift알고리즘
- 알고리즘
- swift reduce
- swift 문자열
- CoreML
- createML
- 컬렉션
- swift concurrency
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |