LoginSignup
13
11

More than 3 years have passed since last update.

【Swift】 Xcode10下でのkeyWindow取得方法の代替(iOS13 beta)

Last updated at Posted at 2019-09-06

開発中アプリのiOS13対応を調査していた際、

let window = UIApplication.shared.keyWindow

で定義していたロジックがDeprecatedになったらしく、想定通りの動きをしないという現象が発生してしまった。
本来なら、Xcode11から使用可能な、

let window = UIApplication.shared.connectedScenes.filter({$0.activationState == .foregroundActive}).map({$0 as? UIWindowScene}).compactMap({$0}).first?.windows.filter({$0.isKeyWindow}).first

のような書き方でどうにでもなるのだが、残念ながら現状のアプリはしばらくXcode10でビルドする必要があるため、UIWindowSceneを使った判定ができない。
というわけでUIWindowSceneを使わず、暫定的にkeyWindowを取得する方法を考えてみた。

sample.swift
        var window = UIWindow()
        for win in UIApplication.shared.windows {
            if win.isKeyWindow {
                window = win
            }
        }

上記のようにすることで、ひとまずXcode10 + iOS13 betaでもkeyWindow取得できるようになった。
ちなみにこの、keyWindowが想定通りの動きをしてくれない現象は、シミュレータでは発生せず、実機でのみ発生したので、もしかしたら今後のアップデートによっては改善したり、改悪したりするかもしれない。

13
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
11