Вы спрашиваете, почему Apple что-то делает? Не может быть однозначного ответа, если Apple явно не высказалась, чего они не сделали.
Лично я нахожу новый подход значительно более элегантным, прозрачным и пуленепробиваемым. Как вы правильно заметили, в старом подходе основной пиб автоматически загружался средой выполнения в ответ на настройку Info.plist, а все остальное происходило с помощью пера, в частности создание экземпляра делегата приложения и окна и соответствующая проводка (делегат приложения должен быть делегатом приложения, окно должно быть окном делегата приложения), за исключением того, что затем мы возвращаемся к коду в делегате приложения для окончательного представления интерфейса.
Это было трудно понять; мне потребовалось много словоблудия, чтобы описать это в моей книге. Это было также легко сломать. Перо должно знать имя класса делегата приложения, поэтому, если вам не понравились те забавные длинные имена, которые были созданы по умолчанию, вы можете легко все испортить, когда вы их изменили.
Теперь, однако, делегат приложения просто называется App Delegate и создается в коде UIApplicationMain (), как вы правильно сказали; и все else также также выполняется в коде как прямое продолжение: создается экземпляр делегата приложения и вызывается didFinishLaunching, после чего мы создаем окно в коде, присваиваем его нашему свойству в коде загрузите перо, если оно есть в коде, установите rootViewController окна в коде и покажите интерфейс в коде, как и раньше.
Таким образом, самозагрузка напрямую отображается для просмотра, поскольку это весь код. Это облегчает понимание и изменение, не нарушая ничего. Похоже, что раньше дизайнер шаблонов просто хвастался тем, сколько вещей можно сделать, чтобы волшебным образом и автоматически происходило за сценой; теперь все происходит открыто, явно.