안녕하세요, iOS 개발하는 루피입니다!
오늘은 저번 글에 작성했던 참고 자료를 정리해 보는 시간을 가져보려고 합니다. 크게 Background와 Foreground에서 앱 실행을 준비하는 자료가 있었는데요, 오늘은 Foreground에서 준비를 해야 하는 내용에 관해 의역하며, 정리해 보려고 합니다. 그러면 시작해 보겠습니다.
화면에 앱을 띄우기 위해 설정합시다.
Overview
Foreground 전환을 사용하여 앱의 UI가 화면에 표시될 준비를 하세요. 앱이 Foreground로 전환되는 것은 일반적으로 사용자의 액션에 대한 응답으로 이루어집니다.
예를 들어
사용자가 앱 아이콘을 탭 하면 시스템이 앱을 실행하고 Foreground로 가져옵니다. 이 과정에서 Foreground 전환을 활용해 앱의 UI를 업데이트하고, 필요한 리소스를 확보하며, 사용자 요청을 처리하기 위한 서비스를 시작합니다.
모든 상태 전환은 UIKit이 적절한 Delegate 객체에 알림을 전달하는 방식으로 처리됩니다.
이와 관련된 세부 내용은 다음과 같습니다
- iOS 13 이상: UISceneDelegate 객체가 사용됩니다. •
- iOS 12 이하: UIApplicationDelegate 객체가 사용됩니다.
UIKit은 두 종류의 델리게이트 객체를 모두 지원할 수 있지만, Scene Delegate가 존재하는 경우 항상 이를 우선적으로 사용합니다.
또한, 특정 Scene이 Foreground로 전환될 때, 해당 Scene과 연결된 Scene Delegate만 알림을 받습니다. Scene 지원을 설정하는 방법에 대한 자세한 내용은 “Specifying the scenes your app supports.” 가이드를 참고하세요.
정리해 보자면,
Foreground의 경우 유저와의 상호작용을 통해 Foreground로 전환하는 것이 대부분이며, 이때 UIKit은 Delegate 객체에 알림을 전달하는 방식을 사용합니다. 특히 iOS 13 이상일 경우, Scene Delegate 객체를 사용하며, 각 Scene를 각각으로 관리하리 하기 때문에 해당 Scene와 연결된 Delegate만 알림을 받습니다.
앱이 Foreground로 전환될 때, Data Model을 업데이트합시다.
앱이 실행될 때, 시스템은 Foreground로 전환하기 전에, inactive 상태에서 시작합니다. 이 시점에 필요한 작업은 앱의 실행 시점 메서드를 사용해 처리해야 합니다. Background에 있던 앱은 UIKit이 아래 메서드 중 하나를 호출하여 Inactive 상태로 전환합니다.
- Scene을 지원하는 앱: 해당 Scene Delegate 객체의 sceneWillEnterForeground(_:) 메서드.
- 그 외의 앱: applicationWillEnterForeground(_:) 메서드.
Background에서 Foreground로 전환될 때, 이러한 메서드를 사용해 디스크에서 리소스를 로드하거나 네트워크에서 데이터를 가져오세요. 앱 실행 시 준비 작업에 대한 자세한 내용은 “Responding to the launch of your app.” 가이드를 참고하세요.
정리해 보자면,
앱을 실행할 때, 시스템(UIKit)은 앱의 상태를 Background -> inactive -> Foreground로 전환하는데 이때, BG -> inactive 상태로 전환하기 위해서는 위에 있는 두 가지 메서드를 사용해야 합니다. 그리고 BG -> FG 전환할 때, 이 메서드를 이용해 디스크에서 리소스를 로드하거나 네트워크에서 데이터를 가져오는 것이 좋습니다.
앱 활성화 시 UI와 초기 테스크를 설정합시다.
시스템은 앱의 UI를 표시하기 직전에 앱을 active 상태로 전환합니다. 활성화는 앱의 UI와 런타임 동작을 구성하기에 좋은 시기입니다. 구체적으로는 다음과 같은 작업을 수행해야 합니다:
- 필요한 경우 앱의 windows를 표시합니다.
- 현재 보이는 뷰 컨트롤러를 변경해야 한다면 변경합니다.
- 뷰와 컨트롤의 데이터 값 및 상태를 업데이트합니다.
- 일시 중지된 게임을 재개할 수 있는 컨트롤을 표시합니다.
- 작업 실행에 사용하는 디스패치 큐를 시작하거나 재개합니다.
- 데이터 소스 객체를 업데이트합니다.
- 주기적으로 실행되는 작업을 위한 타이머를 시작합니다.
코드 작성 위치
- Scene 기반 UI를 사용하는 경우: sceneDidBecomeActive(_:) 메서드
- 그 외의 경우: applicationDidBecomeActive(_:) 메서드
이 시점은 UI를 사용자에게 표시하기 전에 마지막으로 세부적인 구성을 완료할 기회입니다. 하지만, 이 메서드에서 실행 시간이 오래 걸리는 코드는 피해야 합니다. 대신, 필요한 데이터를 미리 준비하거나, 네트워크 업데이트가 필요한 경우 기존 데이터를 먼저 표시한 뒤 비동기로 데이터를 가져오는 방식으로 처리해야 합니다.
뷰가 화면에 나타날 때 해야 할 작업
앱의 활성화 메서드가 반환된 후, UIKit은 표시할 windows을 보여줍니다. 동시에, 관련된 뷰 컨트롤러에게 그 뷰가 곧 화면에 나타날 것임을 알립니다. 이 시점에 viewWillAppear(_:) 메서드를 활용하여 UI 업데이트를 마무리할 수 있습니다. 구체적으로는 다음과 같은 작업을 수행할 수 있습니다:
- 적절한 경우 사용자 인터페이스 애니메이션을 시작합니다.
- 자동 재생이 활성화되어 있다면 미디어 파일 재생을 시작합니다.
- 게임이나 몰입형 콘텐츠의 그래픽을 최대 프레임 속도로 표시하기 시작합니다.
주의할 점으로는...
- 다른 뷰 컨트롤러를 표시하거나 UI를 대폭 변경하지 마세요.
- 이 시점에는 이미 뷰 컨트롤러가 화면에 나타날 준비가 되어 있어야 하며, UI 변경은 최소화해야 합니다.
- 데이터나 설정이 필요한 경우, 이전 단계에서 미리 준비하거나 비동기적으로 처리하세요.
이렇게 공식문서를 바탕으로 Foreground 전환 시 고려해야 하는 부분에 대해서 정리해 보았습니다.
'iOS > UIKit' 카테고리의 다른 글
| [UIKit] Container View Controller (0) | 2025.01.12 |
|---|---|
| [UIKit] ViewController의 생명주기 (0) | 2025.01.11 |
| [UIKit] 공식문서로 App의 LifeCycle 관리에 대해 알아 보자구요 (0) | 2025.01.10 |
| [UIKit] MVC패턴을 이용해 TableView를 만들어 보자 (0) | 2024.12.18 |
| [UIKit] 코드베이스 세팅하는 방법 (0) | 2024.12.16 |