開発中アプリの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が想定通りの動きをしてくれない現象は、シミュレータでは発生せず、実機でのみ発生したので、もしかしたら今後のアップデートによっては改善したり、改悪したりするかもしれない。