📘

'windows' was deprecated in iOS 15.0... と言う警告を消す

2021/11/26に公開

いつの頃からか下記のコードで'windows' was deprecated in iOS 15.0: Use UIWindowScene.windows on a relevant window scene insteadと言う警告が出るようになった。

let window = UIApplication.shared.windows.first

現状まだ動作はするのだが気持ち悪いのでメッセージに従ってコードを修正してみた。

UIWindowScene

メッセージは単純でwindowsがiOS 15.0ではdeprecatedなので代わりにUIWindowScene.windowsを使うようにと言う内容。

しかし、単純にlet window = UIWindowScene.windows.firstとしてもInstance member 'windows' cannot be used on type 'UIWindowScene'; did you mean to use a value of this type instead?とエラーになってしまう。

これはwindowsUIWindowSceneのインスタンスメンバ(プロパティ)なので当たり前。UIWindowSceneのインスタンスに対してwindowsにアクセスしないといけない。
と言うわけでUIWindowSceneインスタンスを得るためのコードから書く必要がある。こんな感じ。

let scenes = UIApplication.shared.connectedScenes
let windowScene = scenes.first as? UIWindowScene
let window = windowScene?.windows.first

最初のUIApplication.shared.connectedScenesで得られるのがSet<UIScene>なのでUIWindowSceneにキャストしなければならないのが一手間かかる…

取り敢えず、これで警告は消えて動作も今まで通りで終了。

参考

https://developer.apple.com/forums/thread/687420

Discussion