Xcode 11では、Single View Appテンプレートから新しいアプリプロジェクトを作成しました。このアプリをiOS 13だけでなくiOS 12でも実行したいのですが、展開ターゲットをiOS 12に切り替えると、次のような多くのエラーメッセージが表示されます。
UIWindowSceneはiOS 13以降でのみ使用できます
私は何をすべきか?
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を考慮する必要があります。
この行コードを次のように追加してください。
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
}