본문 바로가기

IOS Swift

앱 실행 흐름

앱 실행 흐름

C언어 기반이기 때문에 Swift도 마찬가지로 main 함수 부터 시작합니다.

Swift 

  1. @Main으로 진입점을 찾습니다.
  2. UIApplicationMain(_:_:_:_:) 메소드를 호출합니다.
    • UIApplication 싱글톤 객체 생성하고 AppDelegate 객체를 만들어 대리자를 설정합니다.
    • 애플리케이션의 런 루프를 포함하여 메인 이벤트 루프를 설정하고 이벤트 처리를 시작합니다.
    • nib파일을 사용하는 경우나, info.plist 파일을 읽어들여 필요한 데이터를 로드한다.
  3. 실행 할 준비를 마치고 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
  • prinsipalClassName :  UIApplication 클래스 또는 하위 클래스의 이름, nil 이면 UIApplication으로 가정
  • delegateClassName : application delegate가 인스턴스화 되는 클래스 이름. UIApplication의 서브클래스를 지정하는 경우, 하위 클래스를 delegate로 지정하고 앱의 delegate 메세지를 받습니다. 앱의 기본 nib파일에서 delegate 객체를 로드하는 경우, nil을 지정합니다.

몰랐는데 이렇게 nib파일 지정할 수있네요.

 

참고 

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

반응형