Для многих разработчиков iOS, которые начали с Swift, это может показаться очень простым вопросом. Достаточно взглянуть на только что созданный код проекта, и вы легко увидите, что точкой входа для приложения iOS должно быть AppDelegate.swift.

Если мы хотим внести какие-либо изменения в корневой контроллер представления, мы можем перейти к AppDelegate.swift и изменить application (_ application:, didFinishLaunchingWithOptions), и работа будет выполнена. . Таким образом, логически AppDelegate имеет точку входа. Но так ли это?

Давайте сделаем простое изменение кода, чтобы проверить это. Закомментируйте строку @UIApplicationMain в AppDelegate и попробуйте запустить свой проект.

Вы должны получить следующую ошибку, что точка входа не определена.

Интересно 🤔 Здесь приложение ищет точку входа main, которую компилятор не может найти. Верно, что разработчики, начавшие с Objective C, могут быть более знакомы с файлом main.m. Чтобы исправить эту ошибку, мы можем создать файл main.swift и добавить следующий код.

Что делает этот код, так это то, что он вызывает функцию C UIApplicationMain () с параметрами: аргументы командной строки, основной объект Application, для которого мы можем переопределить объект UIApplication для настройки (если передан nil, требуется класс UIApplication) и объект, который будет выступать в качестве делегата для получения обновлений от объекта UIApplication.

В Objective-C может быть реализована та же основная функция, что и ниже, которая вызывает ту же функцию C.

Для большинства проектов нам даже не нужно прикасаться к этой функции или добавлять какие-либо настройки в основной файл. Apple решила упростить это, создав атрибут под названием @UIApplicationMain, который помещается в верхней части файла AppDelegate вашего проекта, чтобы обозначить, что это будет объект делегата для UIApplication.

Таким образом, точка входа для приложения iOS скрыта за одним атрибутом. Не позволяйте внешнему виду обмануть вас :)