web-dev-qa-db-ja.com

Xcode 11の下位互換性:「UIWindowSceneはiOS 13以降でのみ使用できます」

Xcode 11では、Single View Appテンプレートから新しいアプリプロジェクトを作成しました。このアプリをiOS 13だけでなくiOS 12でも実行したいのですが、展開ターゲットをiOS 12に切り替えると、次のような多くのエラーメッセージが表示されます。

UIWindowSceneはiOS 13以降でのみ使用できます

私は何をすべきか?

36
matt

Xcode 11のテンプレートは、シーンデリゲートを使用します。シーンデリゲートと関連クラスはiOS 13で新しく追加されました。 iOS 12以前には存在せず、起動プロセスも異なります。

Xcode 11アプリテンプレートから生成されたプロジェクトに下位互換性を持たせるには、SceneDelegateクラス全体と、UISceneSessionを参照するAppDelegateクラスのメソッドを@available(iOS 13.0, *)としてマークする必要があります。

また、AppDelegateクラスでwindowプロパティを宣言する必要があります(これを行わないと、アプリは実行されて起動しますが、画面は真っ黒になります)。

var window : UIWindow?

その結果、このアプリがiOS 13で実行されると、シーンデリゲートはwindowになりますが、iOS 12以前で実行されると、アプリデリゲートはwindowになり、その他のコードになります次に、下位互換性を保つためにthatを考慮する必要があります。

67
matt

この行コードを次のように追加してください。

STEP1:-

@ SceneDelegate.Swiftから利用可能

@available(iOS 13.0, *)
class SceneDelegate: UIResponder, UIWindowSceneDelegate {

//...

}

STEP2:-

@ AppDelegate.Swiftのいくつかのメソッドを利用可能

// AppDelegate.Swift

@available(iOS 13.0, *)
func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
    // Called when a new scene session is being created.
    // Use this method to select a configuration to create the new scene with.
    return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role)
}

@available(iOS 13.0, *)
func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set<UISceneSession>) {
    // Called when the user discards a scene session.
    // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions.
    // Use this method to release any resources that were specific to the discarded scenes, as they will not return.
}

STEP3:-

var window:UIWindow?のように、AppDelegate.Swiftファイルでwindowプロパティを宣言する必要があります

class AppDelegate: UIResponder, UIApplicationDelegate {

     var window: UIWindow?

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.
        return true
    }
9
IKKA