티스토리 뷰
앱 시작에 대한 응답
앱의 데이터 구조를 초기화하고, 앱이 실행되도록 준비하며, 시스템의 모든 시작 시간 요청에 응답합니다.
개요
사용자가 홈 스크린에서 앱의 아이콘을 누르면 시스템이 앱을 시작합니다. 앱이 특정 이벤트를 요청한 경우 시스템이 백그라운드에서 앱을 실행하여 해당 이벤트를 처리할 수도 있습니다. 씬(scene) 기반 앱의 경우에도 마찬가지로 씬(scene) 중 하나가 화면에 나타나거나 작업을 수행해야 할 때 시스템이 앱을 실행합니다.
모든 앱에는 UIApplication object가 나타내는 연결된 프로세스가 있습니다. 앱은 또한 UIApplicationDelegate프로토콜을 준수하는 개체인 앱 위임 개체를 가지고 있으며, 이 개체는 해당 프로세스 내에서 발생하는 중요한 이벤트에 응답합니다. 장면 기반 앱도 앱 대리인을 사용하여 시작 및 종료와 같은 기본 이벤트를 관리합니다. 실행 시 UIKit는 UIApplication object 와 앱 대리자를 자동으로 생성합니다. 그런 다음 앱의 기본 이벤트 루프가 시작됩니다.
launch storyboard 제공
사용자가 단말기에서 앱을 처음 시작하면 앱이 UI를 표시할 준비가 될 때까지 시스템이 실행 스토리보드를 표시합니다. 시작 스토리보드를 표시하면 앱이 실행되어 작업을 수행 중임을 확인할 수 있습니다. 앱이 자체적으로 초기화하고 UI를 빠르게 준비하면 사용자가 launch storyboard 를 잠깐동안만 볼 수 있습니다.
Xcode 프로젝트에는 사용자 정의할 수 있는 기본 실행 스토리보드가 자동으로 포함되어 있으며 필요에 따라 실행 스토리보드를 추가할 수 있습니다. 프로젝트에 새 시작 스토리보드를 추가하려면 다음을 수행하십시오.
1. 프로젝트를 Xcode로 엽니다.
2. [파일] > [새로 만들기] > [파일]을 선택합니다.
3. 프로젝트에 Launch Screen 리소스를 추가합니다.
시작 스토리보드에 보기를 추가하고 자동 레이아웃 제약 조건을 사용하여 기본 환경에 맞게 크기를 조정하고 배치합니다. UIKit은 사용자가 제공하는 내용을 정확하게 표시하며, 사용 가능한 공간에 보기를 맞추기 위해 제약 조건을 사용합니다. 설계 지침은 휴먼 인터페이스 지침을 참조하세요.
중요
시작 화면에 정적 이미지를 사용하지 마십시오. iOS 14 이상에서는 시작 화면이 25MB로 제한됩니다.
앱의 데이터 구조 초기화
다음 방법 중 하나 또는 둘 다에 앱의 시작 시간 초기화 코드를 입력합니다.
UIKit는 앱 시작 주기가 시작될 때 이러한 메서드를 호출합니다. 이들을 이럴 때 사용하세요:
- 앱의 데이터 구조를 초기화합니다.
- 앱에 실행에 필요한 리소스가 있는지 확인합니다.
- 앱을 처음 시작할 때 초기 설정이 필요할 때. ex) 쓰기 가능한 디렉터리에 템플릿 또는 사용자 수정 가능한 파일을 설치할 떄. Performing One-Time Setup for Your App을 참조하십시오.
- 앱에서 사용하는 중요한 서비스에 연결합니다. 예를 들어 앱에서 원격 알림을 지원하는 경우 Apple Push Notification 서비스에 연결합니다.
- 앱을 실행한 이유에 대해 확인 할 때. Determine Why Your App Launched 를 참조하세요
씬(scene) 기반 앱이 아닌 경우 시작 시 UIKit은 기본 사용자 인터페이스를 자동으로 로드합니다. application(_:didFinishLaunchingWithOptions:) 메서드를 사용하여 인터페이스가 화면에 나타나기 전에 해당 인터페이스를 추가로 변경합니다. 예를 들어 사용자가 마지막으로 앱을 사용했을 때 수행한 작업을 반영하기 위해 다른 뷰 컨트롤러를 설치할 수 있습니다.
주 스레드에서 장시간 실행 작업 이동
사용자가 앱을 실행할 때 빠르게 동작하여 좋은 인상을 남깁니다. application(_:didFinishLaunchingWithOptions:) 메서드가 반환될 때까지 UIKit는 앱의 인터페이스를 표시하지 않습니다. 해당 방법 또는 application(_:willFinishLaunchingWithOptions:) 메서드에서 장시간 실행되는 작업을 수행하면 앱이 사용자에게 느리게 표시될 수 있습니다. 시스템이 앱의 백그라운드 실행 시간을 제한하기 때문에 백그라운드로 시작할 때도 빠르게 돌아가는 것이 중요합니다.
앱 초기화에 중요하지 않은 작업을 시작 시간 순서 밖으로 이동합니다. 예를 들어:
- 앱의 즉시 필요하지 않은 기능의 초기화를 연기합니다.
- 오랫동안 실행되는 중요한 작업을 앱의 메인 스레드에서 제거합니다. 예를 들어 그들을 글로벌 디스패치 대기열에서 비동기식으로 실행합니다.
앱이 시작된 이유 확인
UIKit은 앱을 실행할 때 실행 옵션 사전을 응용 프로그램(_:willFinishLaunchingWithOptions:) 및 응용 프로그램(_:didFinishLaunchingWithOptions:) 메서드에 앱이 실행된 이유에 대한 정보와 함께 전달합니다. 그 사전의 키는 즉시 수행해야 할 중요한 작업을 나타냅니다. 예를 들어 사용자가 다른 곳에서 시작하여 앱에서 계속하려는 작업을 반영할 수 있습니다. 항상 시작 옵션 사전의 내용을 확인하여 예상된 키를 확인하고 해당 키가 있는 경우 적절하게 대응하십시오.
메모
씬(scene) 기반 앱의 경우 UIKit이 애플리케이션(_:configurationForConnecting:options:) 메서드에 전달하는 옵션을 검토하여 씬(scene)을 생성한 이유를 확인합니다.
메모
씬(scene) 기반 앱의 경우 UIKit이 application(_:configurationForConnecting:options:) 메서드에 전달하는 옵션을 검토하여 씬(scene)을 생성한 이유를 확인합니다.
Listing 1 에는 백그라운드 위치 업데이트를 처리하는 앱의 앱 위임 메서드가 표시됩니다. 위치 키가 있으면 앱은 위치 업데이트를 나중에 미루는 대신 즉시 시작합니다. 위치 업데이트를 시작하면 핵심 위치 프레임워크가 새 위치 이벤트를 전달할 수 있습니다.
Listing 1 시작 시 위치 이벤트에 응답
class AppDelegate: UIResponder, UIApplicationDelegate,
CLLocationManagerDelegate {
let locationManager = CLLocationManager()
func application(_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions:
[UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// If launched because of new location data,
// start the visits service right away.
if let keys = launchOptions?.keys {
if keys.contains(.location) {
locationManager.delegate = self
locationManager.startMonitoringVisits()
}
}
return true
}
// other methods…
}
앱에서 해당 기능을 지원하지 않는 한 시스템에 키가 포함되지 않습니다. 예를 들어remoteNotification 을 지원하지 않는 앱의 원격 알림 키는 시스템에 포함되지 않습니다.
시작 옵션 키 목록 및 키 처리 방법에 대한 정보는 UIApplication.LaunchOptionsKey 를 참고하세요.
'Article' 카테고리의 다른 글
Managing Your App's Life Cycle (0) | 2022.04.20 |
---|