[Swift]警告「’windows’ was deprecated in iOS 15.0: Use UIWindowScene.windows on a relevant window scene instead」を消す方法

  • 2022年12月17日
  • 2023年11月9日
  • Swift
  • 590View
  • 0件

アプリを開発していると、バナーを表示する処理の過程で次の警告メッセージが表示されました。

‘windows’ was deprecated in iOS 15.0: Use UIWindowScene.windows on a relevant window scene instead

今回は、警告メッセージを削除する手順をご紹介します。

メッセージの意味

翻訳結果は次のとおりです。

‘windows’ は iOS 15.0 で非推奨となりました。代わりに関連するウィンドウシーンでUIWindowScene.windowsを使用します。

DeepL

次のようにrootViewControllerを取得する処理を UIApplication の windows を使って書いているのですが、iOS 15.0 からは非推奨となったようです。

UIApplication.shared.windows.first?.rootViewController

では、メッセージに書いてあるとおり、次のように UIApplication.shared.windows の部分を UIWindowScene.windows に置き換えてやればよいのかというと、それではうまくいきませんでした。

UIWindowScene.windows.first?.rootViewController

修正方法

まず、UIApplicationクラス の connectedScenesプロパティを取得します。

UIApplication.shared.connectedScenes

connectedScenesプロパティ は Set<UIScene>型なので、firstで先頭データを取得し、UIWindowScene型にキャストする必要があります。

scenes.first as? UIWindowScene

あとはrootViewControllerを取得するのみです。

これらの処理をまとめると次のとおり。

let scenes = UIApplication.shared.connectedScenes
let windowScene = scenes.first as? UIWindowScene
let rootVC = windowScene?.keyWindow?.rootViewController

これで警告はでなくなりました。

お疲れ様でした。

参考

webエンジニア学習部屋

SwiftのUIKitフレームワークのUIApplicationクラスの使い方やプロパティ、メソッドなどをまとめました。…