앱 실행 흐름
C언어 기반이기 때문에 Swift도 마찬가지로 main 함수 부터 시작합니다.
Swift
- @Main으로 진입점을 찾습니다.
- UIApplicationMain(_:_:_:_:) 메소드를 호출합니다.
- UIApplication 싱글톤 객체 생성하고 AppDelegate 객체를 만들어 대리자를 설정합니다.
- 애플리케이션의 런 루프를 포함하여 메인 이벤트 루프를 설정하고 이벤트 처리를 시작합니다.
- nib파일을 사용하는 경우나, info.plist 파일을 읽어들여 필요한 데이터를 로드한다.
- 실행 할 준비를 마치고 AppDelegate에게 application:didFinishLaunchingWithOptions: 메시지를 보냅니다.
UIApplication이란?
실행되는 앱을 제어하기 위해 생성되는 싱글톤 객체
UIApplication클래스는 프로토콜 을 준수하는 대리자를 정의 하고 프로토콜의 메서드 중 일부를 구현해야 합니다. 애플리케이션 객체는 앱 실행, 메모리 부족 경고 및 앱 종료와 같은 중요한 런타임 이벤트를 대리인에게 알려 적절하게 대응할 수 있는 기회를 제공합니다.
UIApplication가 제공하는 API를 이용해 기기 동작을 관리 할 수 있습니다. 8가지 정도 있는데(밑에 UIApplication 링크 참고) 저는 SceneDelegate를 공부하면서 MultiWindow를 구현해볼 때 앱 수준 상태복원 작업 수행하는 기능을 사용해 보았습니다. 앱을 App Switcher에서 스와이프로 종료시킨 후 다시 키면 앱의 처음화면으로 가는게 아니라 종료시켰던 장면으로 시작할 수 있었습니다.
UIApplicationMain(_:_:_:_:) 의 피라미터
- argc : argument count, argv의 개수,
- argv : argument의 변수 목록
- ex) 명령형 프롬프트 c:\> hello.exe apple orange
argc는 3개
argv[0] = hello.exe
argv[1] = apple
argv[2] = orange
- ex) 명령형 프롬프트 c:\> hello.exe apple orange
- prinsipalClassName : UIApplication 클래스 또는 하위 클래스의 이름, nil 이면 UIApplication으로 가정
- delegateClassName : application delegate가 인스턴스화 되는 클래스 이름. UIApplication의 서브클래스를 지정하는 경우, 하위 클래스를 delegate로 지정하고 앱의 delegate 메세지를 받습니다. 앱의 기본 nib파일에서 delegate 객체를 로드하는 경우, nil을 지정합니다.
참고
Apple UIApplication - https://developer.apple.com/documentation/uikit/uiapplication
Apple UIApplicationMain(_:_:_:_:) - https://developer.apple.com/documentation/uikit/1622933-uiapplicationmain
Main nib file 설정 - https://sourcedaddy.com/ipad/main-nib-file.html
'IOS Swift' 카테고리의 다른 글
App Store 개발자 등록하기 (0) | 2021.12.20 |
---|---|
아스키코드와 유니코드 (0) | 2021.11.20 |
비디오 & 오디오 형식 변환을 위한 사전지식 (0) | 2021.10.04 |
멀티윈도우 지원하는 앱 만들기 - iOS (8) | 2021.09.28 |
앱이 In - active 상태가 되는 시나리오 - Swift (0) | 2021.09.23 |