[번역] Managing your app's life cycle (애플 공식 문서)

삭제된 Velog·2024년 8월 26일

UIKit

목록 보기
6/21
post-thumbnail

본 글은 Managing your app's life cycle (애플 공식 문서)를 한국어로 번역하여 옮긴 글입니다.

앱이 포그라운드(foreground)나 백그라운드(background) 상태에 있을 때 시스템 알림에 반응하고, 시스템과 관련된 중요한 이벤트를 처리하세요.


Overview

앱의 현재 상태는 언제든지 무엇을 할 수 있는지무엇을 할 수 없는지를 결정합니다. 예를 들어, 포그라운드 앱은 사용자의 이목을 끌고 있으므로, CPU를 포함한 시스템 리소스에 높은 우선순위를 가지고 있습니다. 그 반대로, 백그라운드 앱은 가능한 한 적은 일을 해야 하며, 화면에 보이지 않기에 가급적 아무 일도 하지 않는 게 좋습니다. 앱이 어느 상태에서 다른 상태로 변할 때, 그에 맞게 동작을 조정해야 합니다.

앱의 상태가 변할 때, UIKit은 적절한 델리게이트 객체의 메서드를 호출함으로써 이를 알려줍니다:

  • iOS 13과 이후 버전에서는 UISceneDelegate 객체를 사용하여 씬(scene) 기반 앱의 라이프 사이클 이벤트에 반응할 수 있습니다.

  • iOS 12와 이전 버전에서는 UIApplicationDelegate 객체를 사용하여 라이프 사이클 이벤트에 반응할 수 있습니다.

⚪️ Note
앱이 씬 지원이 가능하다면, iOS는 iOS 13과 이후 버전에서 항상 씬 델리게이트(scene delegates)를 사용합니다. iOS 12와 이전 버전에서는 시스템은 앱 델리게이트(app delegate)를 사용합니다.

Respond to scene-based life-cycle events

앱이 씬을 지원한다면, UIKit은 각 씬에 독립된 라이프 사이클 이벤트를 전달합니다. 씬은 작동 중인 기기에서 앱 UI의 한 인스턴스를 나타냅니다. 사용자는 각 앱에 대해 여러 씬을 생성할 수 있으며, 이를 개별적으로 보이게 하거나 숨길 수 있습니다. 각 씬은 고유한 라이프 사이클을 가지기에, 각각은 서로 다른 실행 상태에 있을 수 있습니다. 예를 들어, 한 씬은 포어그라운드 상태일 수 있는 반면에 다른 씬들은 백그라운드나 중지(suspended)된 상태에 있을 수 있습니다.

🟡 Important
씬 지원은 선택 기능입니다. 기본적인 지원을 활성화하려면, Specifying the scenes your app supports에 명시된 대로 앱의 info.plist 파일에 UIApplicationSceneManifest 키를 추가해야 합니다.

아래 그림은 씬의 상태 전환을 보여줍니다. 사용자나 시스템이 앱에 대해 새로운 씬을 요청하면, UIKit은 씬을 생성하고 연결되지 않은 상태(unattached state)로 둡니다. 사용자가 요청한 씬은 화면에 나타나면 빠르게 포그라운드 상태로 전환됩니다. 시스템이 요청한 씬은 일반적으로 이벤트를 처리할 수 있는 백그라운드 상태로 전환됩니다. 예를 들어, 시스템은 위치 이벤트를 처리하기 위해 백그라운드에서 씬을 생성할 수 있습니다. 사용자가 앱의 UI를 닫으면 UIKit은 관련된 씬을 백그라운드 상태로 이동시키고, 머지않아 중지 상태로 전환합니다. UIKit은 리소스를 회수하기 위해 백그라운드나 중지된 상태의 씬을 언제든지 연결 해제할 수 있으며, 해당 씬을 연결되지 않은 상태로 되돌립니다.

아래 작업을 수행하기 위해 씬 전환을 사용하세요:

  • UIKit이 앱에 씬을 연결할 때, 씬의 초기 UI를 구성하고 씬이 필요로 하는 데이터를 로드하세요.

  • 포그라운드-활성(active) 상태로 전환될 때, UI를 구성하고 사용자와 상호작용을 준비하세요. Preparing your UI to run in the foreground를 참조하세요.

  • 포그라운드-활성 상태를 벗어나면, 데이터를 저장하고 앱의 동작을 멈추게 하세요. Preparing your UI to run in the background를 참조하세요.

  • 백그라운드 상태에 진입하면, 중요한 작업을 끝내고 가능한 많은 메모리를 정리하세요. 그리고 앱의 스냅샷(snapshot)을 준비하세요. Preparing your UI to run in the background를 참조하세요.

  • 씬이 연결 해제될 때, 씬과 관련된 모든 공유 리소스를 정리하세요.

  • 씬 기반 이벤트에 더하여, 앱이 실행될 때 UIApplicationDelegate 객체를 사용하여 이에 반응해야 합니다. 앱이 실행될 때 무슨 일이 일어나는지에 대한 자세한 정보는 Responding to the launch of your app을 참조하세요.

Respond to app-based life-cycle events

iOS 12와 이전 버전, 씬을 지원하지 않는 앱의 경우, UIKit은 UIApplicationDelegate 객체에서 라이프 사이클 이벤트를 전달합니다. 앱 델리게이트는 별도 화면에서 보여지는 UI를 포함하여 앱의 모든 윈도우(window)를 관리합니다. 결과적으로, 앱 상태 전환은 외부 디스플레이의 컨텐츠를 포함하여 앱의 전체 UI에 영향을 끼칩니다.

아래 그림은 앱 델리게이트 객체와 관련된 상태 전환을 보여줍니다. 앱이 실행되고 난 후, 시스템은 UI가 화면에 보여지는지에 따라 앱을 포그라운드-비활성(inactive)이나 백그라운드 상태로 둡니다. 앱이 포그라운드 상태로 실행되면, 시스템은 자동으로 앱을 활성 상태(active state)로 전환합니다. 그 후, 상태는 앱이 종료될 때까지 활성과 백그라운드 상태를 오갑니다.

아래 작업을 수행하기 위해 앱 전환을 사용하세요:

Respond to other significant events

라이프 사이클 이벤트를 처리하는 것에 더하여, 앱은 아래 테이블에 나열된 이벤트를 처리하기 위한 준비가 되어 있어야 합니다. 이러한 이벤트를 처리하기 위해 UIApplicationDelegate 객체를 사용하세요. 일부 경우에는, 앱의 다른 부분에서 반응을 허용하는 노티피케이션(notification)을 사용하여 이벤트를 처리할 수 있습니다.

종류
내용
메모리 경고앱의 메모리 사용량이 너무 높을 때 수신됩니다. 앱이 점유하는 메모리 크기를 줄이세요. Responding to memory warnings를 참조하세요.
보호된 데이터의 사용 가능/불가능사용자가 기기를 잠그거나 풀 때 수신됩니다. applicationProtectedDataDidBecomeAvailable(_:)applicationProtectedDataWillBecomeUnavailable(_:) 메서드를 참조하세요.
핸드오프 작업NSUserActivity 객체가 처리될 필요가 있을 때 수신됩니다. application(_:didUpdate:) 메서드를 참조하세요.
시간 변경통신사가 시간 업데이트를 전송하는 경우와 같이 여러 시간 변경이 있을 때 수신됩니다. applicationSignificantTimeChange(_:) 메서드를 참조하세요.
URL 열기앱이 리소스를 열어야 할 때 수신됩니다. application(_:open:options:) 메서드를 참조하세요.
profile
rlarjsdn3.github.io

0개의 댓글