1

所以iOS 13真的给我带来了麻烦!我无法理解如何在我现有的应用程序中使用 SceneDelegate。

目前我正在使用布尔检查AppDelegate来确定首先显示哪个 ViewController。我需要弄清楚如何使用SceneDelegate.

我主要关心的是如何确保我的应用程序可以在 iOS 13 和之前的任何 iOS 版本上运行?如果我添加 SceneDelegate,它不会使我在 iOS 13 之前运行的应用程序崩溃吗?

这是我当前设置rootVC的方法

if (loggedIn == nil){
           Utilities.setLoginAsInitialViewContoller(window: window)
       }
       else
       {
           if(termsAgree == nil){
               Utilities.setTermsAsInitialViewController(window: window)
           }
           if(loggedIn != nil){
               if(termsAgree != nil){
                   Utilities.setHomeAsInitialViewContoller(window: window)
               }
           }
       }
class func setLoginAsInitialViewContoller(window:UIWindow) {
       let storyboard = UIStoryboard(name: “Login”, bundle: nil)
       let controller = storyboard.instantiateViewController(withIdentifier: “LoginViewController”)
       window.rootViewController = controller
       window.makeKeyAndVisible()
   }
   class func setHomeAsInitialViewContoller(window:UIWindow) {
       let storyboard = UIStoryboard(name: “Home”, bundle: nil)
       let controller = storyboard.instantiateViewController(withIdentifier: “MainViewNavController”)
       window.rootViewController = controller
       window.makeKeyAndVisible()
   }
   class func setTermsAsInitialViewController(window:UIWindow){
       let storyboard = UIStoryboard(name: “Terms”, bundle: nil)
       let controller = storyboard.instantiateViewController(withIdentifier: “TermsViewController”)
       window.rootViewController = controller
       window.makeKeyAndVisible()
   }

上面的代码包含在我的Utilities.swift类中,并在我的类中调用AppDelegate.swift如下:

Utilities.decideInitialViewController(window: self.window!)
4

1 回答 1

1

您不能在 iOS 13 之前使用 SceneDelegate,这实际上会导致编译错误。

xxx仅在 iOS 13.0 或更高版本中可用

所有现有应用程序都不需要SceneDelegate 与 iOS 13 兼容。

您可以使用最新的 Xcode 版本构建您的应用程序,您应该一切顺利(只需进行一些调整,例如暗模式兼容性和一些新的 UI 更改,但这不会阻止您的应用程序在 iOS 13+ 设备上运行)。

即使我不建议这样做,您仍然可以使用 SceneDelegate,但您必须使用@available标签告诉 Xcode 此代码将仅用于 iOS 13+ 设备。这意味着 iOS 13+ 设备将使用 SceneDelegate,而 iOS 12 及更低版本将继续使用 AppDelegate。这种方法需要维护一些仅向后兼容的代码。

这里有一些解释

于 2019-10-01T11:38:39.260 回答