Xcode12(GM)でビルドするとSwitch must be exhaustive
のwarningが👀
実装を確認すると、通知許可ステータスを確認するコードで吐き出されている様子
UNUserNotificationCenter.current().getNotificationSettings { settings in
switch settings.authorizationStatus {
case .authorized, .provisional:
print("許可")
case .denied:
print("拒否")
case .notDetermined:
print("許可求む")
@unknown default:
fatalError()
}
UNAuthorizationStatus
のリファレンスを覗くとiOS14から新たに
.ephemeral
が追加されていました。
https://developer.apple.com/documentation/usernotifications/unauthorizationstatus
この子は
The application is temporarily authorized to post notifications. Only available to app clips.
つまり、iOS14から実装可能なApp Clipsにおいて、一時的に通知の許可を取ることができ、そのステータスということです。
App Clipsを実装している場合の実装はこちらの公式リファレンスを参考に
https://developer.apple.com/documentation/app_clips/enabling_notifications_in_app_clips
let center = UNUserNotificationCenter.current()
center.getNotificationSettings { (settings) in {
if settings.authorizationStatus == .ephemeral {
// The user didn't disable notifications in the app clip card.
// Add code for scheduling or receiving notifications here.
return
}
}
などを追加します。
App Clipsを実装していない場合は、通らない想定なので
UNUserNotificationCenter.current().getNotificationSettings { settings in
switch settings.authorizationStatus {
case .authorized, .provisional:
print("許可")
case .denied:
print("拒否")
case .notDetermined:
print("許可求む")
case .ephemeral:
fatalError()// or assertionFailure()
@unknown default:
fatalError()
}
でwarning回避できます。
リファレンスにbetaと書かれているし、fatalError
利用したくない方は念の為
assertionFailure
で、取得失敗の扱いで良いかと思います🙋♂️
ご参考までに🐣🌱