web-dev-qa-db-ja.com

iOS 12および13をサポートする場合のAppDelegateおよびSceneDelegate

IOS 12とiOS 13をサポートする必要があります。

AppDelegateSceneDelegateの間でコードを複製する必要がありますか?

例えば:

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
    guard let windowScene = (scene as? UIWindowScene) else { return }
    let window = UIWindow(windowScene: windowScene)

    window.rootViewController = HomeViewController()
    window.makeKeyAndVisible()

    self.window = window
}

そして

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    let window = UIWindow(frame: UIScreen.main.bounds)
    window.rootViewController = HomeViewController()
    window.makeKeyAndVisible()

    self.window = window

    return true
}

これを行わないと、1つのバージョンで黒い画面が表示されますが、viewDidLoadHomeViewControllerメソッドで印刷すると、2回呼び出されることがわかります。

didFinishLaunchingWithOptionsを更新すると、iOS13まだ2回呼び出されています。

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

    guard #available(iOS 12, *) else { return true }

    let window = UIWindow(frame: UIScreen.main.bounds)
    window.rootViewController = HomeViewController()
    window.makeKeyAndVisible()

    self.window = window

    return true
}
5
Teddy K

Xcode 11. *およびSwift 5。*

IOS 12とiOS 13の両方でコードが正常に機能するようになった後、以下の手順に従ってください-

  1. Info.plistファイルからシーンマニフェストを削除する
  2. シーンデリゲートを削除
  3. AppDelegate内にウィンドウプロパティを追加する
  4. AppDelegateからシーンに関連するすべてのメソッド(主に2つのメソッド)を削除します。

これが誰かのために働くことを願っています。ハッピーコーディング????

1