Ошибка создания окна из AppDelegate в Swift 5.0

Я использую Xcode 11 и Swift 5.0. Я скопировал свой код из другого приложения, использующего Swift 4.2. Этот код создает экземпляр tabBarViewController в AppDelegate, изменяет окно на tabBarVC и показывает его, если выполняются определенные условия. Но это не работает в Swift 5.0 и Xcode 11. Вот код:

var window: UIWindow?

func application(_ application: UIApplication, willFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
    // Run Firebase
    FirebaseApp.configure()
    // Check Firebase Auth to see if the user is signed in already.
    if Auth.auth().currentUser != nil {
        print ("User is already authenticated and signed in.")
        // Check to make sure the user is stored in local settings.
        if let appUser = LocalStorageService.loadCurrentUser() {
            print ("Local storage has a user: \(appUser)")
            // Create a tab bar controller.
            let tabBarVC = UIStoryboard(name: "Main", bundle: .main).instantiateViewController(withIdentifier: Constants.Storyboard.tabBarController)
            // Show it
            window?.rootViewController = tabBarVC
            window?.makeKeyAndVisible()
        }
        return true // If auth has a user and there is local user, window changes.
    } else {
        print ("No Authenticated current user, must proceed with Login.")
        return false
    }
}

TabBarVC заполнен успешно, но окно остается пустым. Затем приложение показывает другой контроллер представления. Код оригинального приложения, который я вижу, ничем не отличается. И этот до сих пор работает. Мысли будут оценены.


person TM Lynch    schedule 12.10.2019    source источник


Ответы (1)


Я удалил SceneDelegate из навигатора и следующие разделы из info.plist, относящиеся к сценам, и теперь он работает, как ожидалось (в другом приложении не было SceneDelegate или этих разделов в info.plist. Я предполагаю, что они были добавлены при создании проекта в Xcode 11):

введите здесь описание изображения

Я читал о сценах для iOS 13 в документации Apple. Я не планирую использовать сцены, но если кто-то действительно захочет использовать сцены, он должен будет определить, как настроить info.plist, чтобы разрешить создание экземпляра VC в AppDelegate.

person TM Lynch    schedule 12.10.2019
comment
См. Дубликат, отмеченный Мэттом, если вы хотите использовать сцены. Этот ответ помещает окно в делегата сцены. Этот ответ полностью удаляет делегата сцены. Сцены не требуются. - person TM Lynch; 12.10.2019