Вплоть до iOS 12 AppDelegate будет иметь дело с событиями уровня процесса, сообщая, когда приложение запускается и завершается, и сообщая вам о состоянии его пользовательского интерфейса с помощью методов жизненного цикла пользовательского интерфейса, таких как действительно вошел в фоновый режим или передний план события. Это сделало AppDelegate идеальным местом для разработчиков, чтобы настроить UIWindow контейнер для программного запуска точки входа приложения. Это было нормально в мире приложений единого окна ...

Начиная с iOS 13 и новее, у нас теперь есть концепция возможностей многооконного сеанса, позволяющая запускать несколько экземпляров приложения одновременно с различным контентом. Окна управляются сценой или UISceneSession классом. Делегат вашего приложения по-прежнему будет обрабатывать события процесса, но больше не будет нести ответственность за настройку окна. События жизненного цикла пользовательского интерфейса теперь управляются UISceneDelegate в другом месте файла SceneDelegate.swift. Это делает App Delegate более компактным и дает вашей программной точке входа более подходящий дом, где он может получать методы жизненного цикла пользовательского интерфейса для каждого сеанса.

Вот как перенести программную настройку вашего приложения из делегата приложения в делегат сцены и как отказаться от Main.storyboard в iOS 13 и новее.

Шаг 1/4: Удалите файл Main.storyboard

Вам нужно удалить Main.storyboard и избавиться от ViewController.swift, так как вы, скорее всего, захотите создать свой собственный начальный контроллер представления. По крайней мере, вы можете просто переименовать этот класс во что-нибудь более подходящее для вашего приложения.

Шаг 2/4: Удалите 2 пары значений ключа в info.plist

Удалите из файла info.plist следующие пары "ключ-значение":
1. Storyboard Name
2. Main storyboard file base name
, а в терминологии AppleScript они называются UISceneStoryboardFile и UIMainStoryboardFile соответственно.

Если вы запустите приложение сейчас, вы увидите черный экран. Это правильное поведение, поскольку вы не создали окно для представления, в котором вам также потребуется создать начальный контроллер представления для отображения. Это подводит нас к следующим двум шагам. Создание контроллера представления и создание окна.

Шаг 3/4: Создайте свой начальный контроллер представления

Теперь нам нужно создать начальный контроллер представления, который мы хотим представить пользователю, когда он будет работать с вашим приложением. Вы можете иметь любую сложную иерархию, какую захотите, но в этом примере мы будем придерживаться простого UIViewController с именем ArticleListViewController.

Вы можете создать свой контроллер представления, как захотите, в нашем случае это так же просто, как File -> New -> File …, выбрав Cocoa Touch Class, напишите имя вашего класса, нажмите «Далее» и нажмите «Создать».

Ваш программный UIViewController класс появится в навигаторе проекта в списке файлов.

Примечание. Представление в контроллерах представлений в раскадровках имеет белый цвет фона по умолчанию. Это по сравнению с программными контроллерами представления, представления которых не имеют цвета фона по умолчанию! Если вы не установите цвет фона для вашего представления, вы получите черное окно в конце этого руководства. Поэтому установите цвет вашего представления вашего контроллера представления, как view.backgroundColor = .white в методе viewDidLoad.

Последний шаг: программно создайте иерархию окон

Как ранее разработчики писали в делегате приложения, теперь вы просто указываете настройку окна в делегате сцены.

Запустите приложение, и теперь у вас будет первый сеанс сцены, управляющий точкой входа в приложение слишком программно!

В следующий раз мы сосредоточимся на том, как изменить ваше приложение для создания многооконного приложения!

Узнайте, как быстро развернуть опции в другой статье, которую я написал!

Если вам понравился мой контент сегодня, подумайте о том, чтобы подписаться на меня здесь, на Medium, так как я хотел бы, чтобы вы стали частью моего писательского пути для iOS.

Вы также можете проверить меня на Github и witter.