iOS 앱은 생명주기 단계(실행, 활성, 백그라운드, 종료)를 거치며, SwiftUI는 이를 App 프로토콜과 scenePhase 환경 값을 통해 노출합니다. 이 단계에 후킹하여 적절한 시점에 데이터를 저장하고, 작업을 일시 중지하고, UI를 갱신합니다.
동작 방식
앱 진입점은 으로 표시되고 을 준수하는 입니다. 하나 이상의 (보통 )을 반환합니다.
iOS 앱은 생명주기 단계(실행, 활성, 백그라운드, 종료)를 거치며, SwiftUI는 이를 App 프로토콜과 scenePhase 환경 값을 통해 노출합니다. 이 단계에 후킹하여 적절한 시점에 데이터를 저장하고, 작업을 일시 중지하고, UI를 갱신합니다.
앱 진입점은 으로 표시되고 을 준수하는 입니다. 하나 이상의 (보통 )을 반환합니다.
@mainAppstructSceneWindowGroup@main
struct MyApp: App {
@Environment(\.scenePhase) private var scenePhase
var body: some Scene {
WindowGroup {
ContentView()
}
.onChange(of: scenePhase) { _, newPhase in
switch newPhase {
case .active: resumeTimers() // 앱이 포그라운드, 상호작용 가능
case .inactive: pauseSensitive() // 전환 중 (예: 앱 스위처)
case .background: saveState() // 보이지 않음 — 지금 영속화
@unknown default: break
}
}
}
}
.active — 포그라운드이며 이벤트를 수신합니다. 애니메이션, 타이머, 실시간 업데이트를 재개합니다..inactive — 보이지만 이벤트를 받지 않습니다(수신 전화, 앱 스위처). 짧은 전환 상태입니다..background — 보이지 않습니다. 종료될 수 있기 전에 상태를 영속화하고 리소스를 해제할 제한된 시간을 얻습니다..inactive가 아니라 .background에서 하세요. inactive는 자주, 짧게 발생합니다.BGTaskScheduler가 필요합니다.AppDelegate/SceneDelegate에서는 applicationDidEnterBackground 등이 동등한 콜백입니다. SwiftUI는 @UIApplicationDelegateAdaptor를 통해 여전히 이들과 연결할 수 있습니다.사용자는 끊임없이 앱을 전환하며, 시스템은 백그라운드 앱을 경고 없이 종료할 수 있습니다. scenePhase에 올바르게 반응하는 것이 앱을 신뢰할 수 있게 만듭니다. 저장되지 않은 데이터가 살아남고, 사용자가 돌아왔을 때 오래된 콘텐츠 대신 갱신된 UI를 보게 됩니다.
주니어부터 시니어까지 상세한 답변이 포함된 IT 면접 질문 라이브러리.
후원하기