Каков жизненный цикл запуска iOS-приложения после тапа по иконке?

«Каков жизненный цикл запуска iOS-приложения после тапа по иконке?» — вопрос из категории Swift Core, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Последовательность событий от тапа до отображения интерфейса:

  1. Запуск процесса: Система создает процесс приложения и загружает его основной исполняемый файл (Mach-O) и связанные динамические библиотеки (dylibs).
  2. Точка входа: Вызывается функция UIApplicationMain (или @main в Swift). Она:
    • Создает singleton-объект класса UIApplication (или вашего подкласса).
    • Создает экземпляр AppDelegate и назначает его делегатом приложения.
  3. Настройка приложения: Вызывается application(_:didFinishLaunchingWithOptions:) в AppDelegate. Это основная точка для начальной настройки.
  4. Создание UI:
    • Со Storyboard: Система загружает указанный в Info.plist (UIMainStoryboardFile) storyboard, создает Initial View Controller и назначает его rootViewController для главного окна (UIWindow).
    • Без Storyboard (программно): Вы должны создать UIWindow и установить rootViewController вручную.
  5. Отображение: Окно становится keyWindow и visible. Запускается Main Run Loop, который начинает обрабатывать события (касания, таймеры и т.д.).

Минимальный пример AppDelegate без Storyboard:

func application(_ application: UIApplication,
                 didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    // 1. Создаем окно
    window = UIWindow(frame: UIScreen.main.bounds)
    // 2. Создаем и назначаем корневой контроллер
    window?.rootViewController = MyRootViewController()
    // 3. Делаем окно видимым и ключевым
    window?.makeKeyAndVisible()
    return true
}