App terminated by watchdog due to hang in Game Center authentication.

Hi,

We are seeing watchdog-terminated app hangs reported by users on iOS 26. The hang occurs during cold launch when we set the Game Center authenticate handler. Our usage is straightforward — we follow the official guide: to set the handler once in the boot flow.

localPlayer.authenticateHandler = ^(UIViewController *viewController, NSError *error){//handler code}

The app never reaches our handler code. Instead, it is killed by the watchdog before the handler is invoked.

Root Cause: We believe the root cause is GKDaemonProxy localPlayerAgeCategory makes a synchronous XPC call ( xpc_connection_send_message_with_reply_sync ) to the Game Center daemon ( com.apple.gamed ). The daemon does not respond, blocking the main thread indefinitely until the watchdog terminates the app. Also we haven't seen this before iOS 26.

Reproduction Conditions: Unfortunately we don't have a consistent way to reproduce it. It happens intermittently. And I can't share the iOS build due to company requirements. I have pasted the stack trace below (all users report the similar stack tracks).

Stack trace (representative, reported consistently across affected users):

App Hang: The app was terminated while unresponsive
0   libsystem_kernel.dylib +0xcd0  _mach_msg2_trap
1   libsystem_kernel.dylib +0x4308 _mach_msg2_internal
2   libsystem_kernel.dylib +0x4228 _mach_msg_overwrite
3   libsystem_kernel.dylib +0x4074 _mach_msg
4   libdispatch.dylib +0x1c980     __dispatch_mach_send_and_wait_for_reply
5   libdispatch.dylib +0x1cd20     _dispatch_mach_send_with_result_and_wait_for_reply
6   libxpc.dylib +0x11ed8          _xpc_connection_send_message_with_reply_sync
7   Foundation +0x41710            ___NSXPCCONNECTION_IS_WAITING_FOR_A_SYNCHRONOUS_REPLY__
8   Foundation +0x29068            -[NSXPCConnection _sendInvocation:orArguments:count:methodSignature:selector:withProxy:]
9   Foundation +0x69b7c            -[NSXPCConnection _sendSelector:withProxy:arg1:]
10  Foundation +0x699e8            __NSXPCDistantObjectSimpleMessageSend1
11  GameCenterFoundation +0x986fc  ___39-[GKDaemonProxy localPlayerAgeCategory]_block_invoke.109
12  GameCenterFoundation +0x1397d0 0x22cbde7d0 (0x22cbde794 + 60)
13  GameCenterFoundation +0x139610 0x22cbde610 (0x22cbde508 + 264)
14  GameCenterFoundation +0x139770 0x22cbde770 (0x22cbde6ec + 132)
15  GameCenterFoundation +0x98420  -[GKDaemonProxy localPlayerAgeCategory]
16  GameCenterFoundation +0x2ceb4  -[GKClientPreferencesSupport localPlayerAgeCategory]
17  GameCenterFoundation +0x93ba4  -[GKPreferences(AgeCategoryRestrictions) localPlayerAgeCategory]
18  GameCenterFoundation +0x93c34  -[GKPreferences(AgeCategoryRestrictions) getRestrictionLimitForLocalPlayer:]
19  GameCenterFoundation +0x93cd0  -[GKPreferences(AgeCategoryRestrictions) clampBoolRestriction:tableEntry:]
20  GameCenterFoundation +0x93d40  -[GKPreferences(AgeCategoryRestrictions) isBoolValueRestricted:tableEntry:]
21  GameCenterFoundation +0x9f7b8  -[GKPreferences(Restrictions) isBoolKeyRestricted:category:]
22  GameCenterUICore +0x2d04       -[GKLocalPlayerAuthenticator _authenticateUsingAuthUI:authenticationResults:usernameEditable:authUIDismissHandler:completionHandler:]
23  GameCenterUICore +0xd638       ___106-[GKLocalPlayer(AuthenticationPrivate) startAuthenticationForExistingPrimaryPlayerUponReturnToForeground:]_block_invoke
24  libsystem_trace.dylib +0xdb40  _os_activity_apply_f
25  GameCenterFoundation +0x181f4  -[GKActivity execute:]
26  GameCenterFoundation +0x18138  +[GKActivity named:execute:]
27  GameCenterUICore +0xd528       -[GKLocalPlayer(AuthenticationPrivate) startAuthenticationForExistingPrimaryPlayerUponReturnToForeground:]
28  libsystem_trace.dylib +0xdb40  _os_activity_apply_f
29  GameCenterFoundation +0x181f4  -[GKActivity execute:]
30  GameCenterFoundation +0x18138  +[GKActivity named:execute:]
31  GameCenterFoundation +0x4f124  ___40-[GKLocalPlayer setAuthenticateHandler:]_block_invoke
32  libdispatch.dylib +0x1b1e0     __dispatch_client_callout
33  libdispatch.dylib +0x45ac      __dispatch_once_callout
34  GameCenterFoundation +0x4f070  -[GKLocalPlayer setAuthenticateHandler:]

Additional Notes:

  • This issue was not observed prior to iOS 26. We have no reports of this on iOS 17 or iOS 18.
  • We are unable to share a build due to company policy.
  • We cannot reproduce this consistently — it occurs intermittently in production.
  • All affected users report the same stack trace pattern.

Same here. We have random users reporting the same in production. It survives re-installs of the app but is resolved by restarting the device.

Unable to find a strong repro.

@yizhoupan and @akondratiuk Thank you! This is extremely interesting.

@yizhoupan Thanks for the code above to reproduce it!

Your 2 bugs got routed to the correct team and they are currently looking at that issue.

You can see the status of your feedback in Feedback Assistant. There, you can track if the report is still being investigated, has a potential identifiable fix, or has been resolved in another way. The status appears beside the label "Resolution." We're unable to share any updates on specific reports on the forums.

For more details on when you'll see updates to your report, please see What to expect after submission.

Albert  WWDR

App terminated by watchdog due to hang in Game Center authentication.
 
 
Q