소피it블로그
[UIKit] 앱 포그라운드 실행 준비하기 - 공식 문서 번역 본문
1. 개요
앱의 UI가 화면에 나타날 준비를 하기 위해 포그라운드 전환을 사용하라. 앱이 포그라운드로 전환되는 것은 주로 유저의 행동에 의한 결과이다. 예를 들어 유저가 앱의 아이콘을 탭하면 시스템은 앱을 론치라고 포그라운드로 가져온다. 앱의 UI를 업데이트하고, 자원을 가져오고, 유저들의 요청에 대한 서비스를 제공하기 위해 포그라운드 전환을 사용하라.
모든 상태 전환의 결과로써 UIKit는 적절한 delegate 객체에 알림을 보낸다.
- iOS 13 및 그 이후: UISceneDelegate 객체
- iOS 12 및 그 이전: UIApplicationDelegate 객체
두 개의 delegate 객체 모두를 지원할 수 있지만 UIKit는 가능한 상황에서는 항상 scene delegate 객체를 사용한다. UIKit는 포그라운드에 진입하는 특정한 씬과 관련된 씬 delegate만을 호출한다.
2. 앱이 포그라운드에 진입할 때 앱의 데이터 모델 업데이트하기
론치시에 시스템은 앱을 포그라운드로 전환하기 전에 inactive state에서 시작한다. 이 때 수행해야 할 일이 있다면 론치 타임 메서드를 사용하라. 백그라운드에 있는 앱일 경우 UIKit는 앱을 다음과 같은 메서드 중 하나를 호출함으로써 앱을 비활성 상태로 진입시킨다.
- 씬을 지원하는 앱의 경우: 적절한 씬 delegate의 sceneWillEnterForeground(_:) 메서드
- 씬을 지원하지 않는 경우: applicationWillEnterForeground(_:) 메서드
백그라운드에서 포그라운드로 전환할 때 이 메서드들을 사용하여 디스크에서 자원을 가져오고 네트워크에서 데이터를 불러오라.
3. 유저 인터페이스를 구성하고 첫 작업을 활성화하기
시스템은 앱의 UI를 화면에 띄우기 직전에 앱을 활성 상태로 전환한다. 활성화 상태는 앱의 UI와 런타임 행동을 구성하기 좋은 때이다. 구체적으로 말하자면 다음과 같다:
- 필요한 경우 앱의 윈도우를 보여준다.
- 필요한 경우 현재 눈에 보이는 뷰 컨트롤러를 바꿔준다.
- 데이터 값, 뷰와 컨트롤의 상태를 업데이트한다.
- 중지된 게임을 재개하기 위해 제어 화면을 보여준다.
- 작업을 실행하기 위한 dispatch queue들을 시작하거나 재개한다.
- 데이터 소스 객체를 업데이트한다.
- 시간이 정해진 작업을 위한 타이머를 시작한다.
다음과 같은 메서드에 구성 코드를 작성하라:
- 씬에 기반한 UI의 경우: 적절한 delegate 객체의 sceneDidBecomeActive(_:) 메서드
- 이외의 경우: 앱 delegate 객체의 applicationDidBecomeActive(_:) 메서드
활성화 상태는 또한 유저에게 보여주기 전에 UI에 마무리 작업을 할 시기이기도 하다. 활성화 메서드를 멈출 가능성이 있는 코드를 실행시키지 마라. 대신, 필요한 것들을 미리 준비해놓아라. 예를 들어 데이터가 앱 바깥에서 자주 바뀐다면, 백그라운드 작업을 통해 앱이 포그라운드로 전환되기 전에 네트워크에서 업데이트를 가져오라. 그렇지 않을 경우에는 비동기적으로 변동 사항을 가져오는 동시에 이미 존재하는 데이터를 보여주기 위해 준비하라.
4. 뷰가 나타날 때 UI-Specific한 업무를 시작하라
활성화 메서드가 리턴을 하면 UIKit는 윈도우를 보여주며, 해당되는 뷰 컨트롤러에게 그 뷰들이 나타날 것임을 알린다. 뷰 컨트롤러의 viewWillAppear(_:) 메서드를 통해 인터페이스에 최종 업데이트를 수행하라. 예를 들면 다음과 같다:
- 유저 인터페이스 애니메이션을 시작하기
- 자동 재생이 활성화되어있는 경우 미디어 파일을 재생하기
- 게임과 immersive 컨텐츠에 대해 풀 프레임으로 그래픽을 보여주기
다른 뷰 컨트롤러를 보여주려고 하거나 유저 인터페이스에 중대한 변화를 만들지 마라. 뷰 컨트롤러가 스크린에 나타날 때 인터페이스는 준비가 다 된 상태여야 한다.
'개발_iOS > UIKit' 카테고리의 다른 글
[UIKit] 앱 론치에 응답하기 - 공식 문서 번역 (0) | 2022.08.12 |
---|---|
[UIKit] 앱 백그라운드 실행 준비하기 - 공식 문서 번역 (0) | 2022.08.12 |
[UIKit] UISceneDelegate 정리 (0) | 2022.08.10 |
[UIKit] UIApplicationDelegate 정리 (0) | 2022.08.10 |
[UIKit] App's Life Cycle 앱의 라이프 사이클 정리 (0) | 2022.08.10 |