Вопрос проверяет, понимает ли кандидат обязанности AppDelegate, и умеет ли разделять инфраструктуру приложения и UI-сцену.
AppDelegate — это основной объект, который получает события приложения от iOS через UIApplicationDelegate. Он обычно отвечает за инициализацию сервисов при старте: аналитика, логирование, DI-контейнер, push, конфигурация SDK. В проектах со сценами он не обязан создавать окно, этим занимается SceneDelegate. Важно не превращать AppDelegate в “помойку” из бизнес-логики. Он должен оставаться инфраструктурным слоем.
AppDelegate — это место, где приложение “поднимается” как система: настраиваются зависимости, подключаются SDK и регистрируются системные возможности.
AppDelegateОбычно в AppDelegate размещают:
Bootstrap приложения
настройка DI / сервис-локатора
конфигурация логирования
запуск аналитики/краш-репортинга
Интеграции с системой
регистрация push-уведомлений
получение device token
обработка некоторых типов открытия приложения через URL/ссылки (зависит от сцен)
Глобальная политика приложения
настройки окружений (dev/stage/prod)
миграции, подготовка хранилищ (осторожно, без тяжелых операций на main)
AppDelegateВажно проговорить границы ответственности:
бизнес-логику экранов
сетевые запросы “по делу” при старте без явной необходимости
навигацию по приложению (если есть сцены — это ответственность сцены/координатора)
Плохой признак — когда didFinishLaunching становится огромным.
func application(
_ application: UIApplication,
didFinishLaunchingWithOptions options: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
configureLogging()
configureAnalytics()
configureDI()
return true
}
Каждая configure... внутри должна быть короткой и делегировать работу отдельным объектам.
Если приложение использует сцены:
AppDelegate запускает инфраструктуру приложения
SceneDelegate поднимает конкретный UI-контекст (окно/навигацию)
Если сцены не используются (или отключены), тогда AppDelegate может создавать UIWindow и root controller.
AppDelegate отвечает за старт приложения и системные интеграции на уровне процесса, а не за UI и бизнес-логику. Хороший AppDelegate короткий, инфраструктурный и делегирует работу сервисам. Чем лучше разделены обязанности между AppDelegate/SceneDelegate/координаторами, тем проще поддерживать архитектуру и тестирование.