The functionality of authorizationStatus
and requestAuthorization
is completely broken. I'm using Xcode 15.3 and iOS 17.4.
Does anyone have a solution?
authorizationStatus doesn't behave as promised
-
Revoking authorization in the system-wide settings does not change the
authorizationStatus
while the app is not closed. Calls tocenter.authorizationStatus
will still return.approved
instead of.denied
. -
Even closing and relaunching the app after revoking authorization does not work:
authorizationStatus
is then.notDetermined
when it should be.denied
. -
Tapping "Don't Allow" in the alert shown after an initial call to
requestAuthorization
leaves theauthorizationStatus
unchanged, i.e. at.notDetermined
. This is contrary to the promised outcome.denied
(defined as: "The user, parent, or guardian denied the request for authorization") and contrary to the definition of.notDetermined
(defined as: "The app hasn’t requested authorization", when it just did). -
Same issue when first tapping "Continue" followed by "Don't Allow" on the next screen.
As a consequence of authorizationStatus
being broken, its publisher $authorizationStatus
is worthless too.
requestAuthorization doesn't behave as promised
This is most likely a consequence of the corrupted authorizationStatus
: when revoking authorization in the system-wide settings, a call to requestAuthorization
opens the authorization dialogue instead of doing nothing. It is thus possible to repeatedly ask a user to authorize Family Controls.
Code sample
To reproduce, create a new SwiftUI app, add the "Family Controls" capability and a button executing the following task when tapped:
let center = AuthorizationCenter.shared
var status = center.authorizationStatus
print(status)
do {
try await center.requestAuthorization(for: .individual)
print("approved")
} catch {
print("denied")
}
status = center.authorizationStatus
print(status)