発生を確認した環境
- Xcode 9.4.1
- Swift 4.1
- iOS11.4
現象
Healthkitで初回のrequestAuthorization完了後に画面がタップできなくなる問題が発生しました。
let healthStore = HKHealthStore()
healthStore.requestAuthorization(toShare: shares, read: reads, completion: { success, error in
// ここから画面がタップできなくなる
}
原因
Healthkitが表示したUIWindowが、認証完了後も消えず前面に重なって表示され続けているためでした。
対処
このWindowは不要と思われるので削除したいところですが、まっとうに削除する方法がないため、以下のようにアプリのメインであるwindowとHealthkitが表示したwindowのwindowLevelを入れ替えることで対処しました。
DispatchQueue.main.async {
for window in UIApplication.shared.windows {
if window.windowLevel == 999.0 {
window.windowLevel = 0.0
}
}
if let appDelegate = UIApplication.shared.delegate {
appDelegate.window??.windowLevel = 1.0
}
}