Hi — we’re testing our app on iOS 26 and ran into strange behavior with GKLocalPlayer.local.authenticateHandler.
GKLocalPlayer.local.authenticateHandler = { [weak self] viewController, error in
// additional code
}
What happens:
- When we assign authenticateHandler on iOS 26 and the user is not signed in to Game Center, the system shows a full-screen Game Center overlay asking the user to sign in.
- If the user taps Cancel, nothing further happens — the closure is not invoked again, so we don’t receive an error or any callback. The app never learns whether the auth was cancelled or failed.
- In previous iOS versions the closure was called (with viewController / error as appropriate) and the flow worked as expected.
What we tried:
- Verified authenticateHandler is being set.
- Checked
GKLocalPlayer.local.isAuthenticated
after the overlay dismisses — it’s unchanged. - Observed system logs: a
com.apple.GameOverlayUI
scene is created and later removed (so the auth overlay is shown by the system). - Confirmed the same code works on earlier iOS versions. :thinking:
Question:
Has anyone seen authenticateHandler
not being invoked on iOS 26 when the Game Center auth overlay is presented? Could this be a behavioral change in iOS 26 (overlay runs in a separate system process), or a bug? Any suggested workarounds to reliably detect that the user cancelled the sign-in (for example: listening for willResignActive / didBecomeActive, watching for a system overlay, or saving/presenting the viewController manually)?
Thanks in advance for any advice — we’d appreciate pointers or suggested diagnostics ?
Hello,
This sounds like a regression in beta iOS 26.
What version of the betas (iOS and Xcode) are you using and has this behavior changed between any other beta versions recently?
To fully understand the request flow and configuration it would be helpful to have a sample project. Please provide one if you're able.
Something in the documentation of note: "GameKit calls the [authenticateHandler] handler, possibly several times, for the following cases ..." so we'll need to check each case.
All that said, please also file a bug report as this is still in beta.