Unity Apple Plugin GameKit Error 37 when sending build to app review

I'm using the Apple Unity Plugins to use Game Center to authenticate Playfab accounts for my game and when I test this on testflight, everything works fine for me and the people I've tested with, however, when I send the build to review, they are getting GameKitException 37 which states "This game is not listed in a marketplace that supports Game Center" and upon further research I found this page https://developer.apple.com/documentation/gamekit/gkerror/code/appunlisted which I'm assuming is the same thing.

This seems to suggest that I need my app to be listed on the App Store which is strange because this has created a what comes first, the chicken or the egg problem. I need to pass review to get the game listed in the App Store and they can't test the game because accounts cannot be authenticated with Game Center which apparently needs to be listed on the App Store.

So far, I can't find the reason why this doesn't happen on testflight and only happens when I send it to review. I opened a ticket to Apple Developer Support and haven't recieved a response. I asked app review about it and they replied

"Hello,

Thank you for your response. Since all apps must pass App Review before they can be approved, it should not be necessary to have a "store page".

We look forward to reviewing your app once all issues have been addressed and the new build has been received and queued for review.

Best regards,

App Review"

Which doesn't really help me. I am quite pressed for time and I really need assistance in resolving this issue which I cannot replicate. Has anyone encountered this issue or know how to solve it?

Answered by CM-InnoTec in 799637022

Finally, I was able to upload a release candidate (version 1.0.0) Friday night. Fingers crossed, they've again rejected my app, but this time it was due to another error unrelated to the GameCenter login.

After checking the PlayFab instance, I also saw that there was a NEW account created. 📣📣📣📣

Eventually, I found out that PlayFab has a hard limit when it comes to the player's display name which is 25 characters in length. This was also the reason why it crashed this time.

My logs showed that the player name was "Frank Lion of Hairy Outpost".

I assume that's some kind of "default" name suggestion whenever you have no GameCenter account yet.

Nevertheless, all I can tell is that it finally works and Apple did neither admit that they have had an issue nor that it was my fault. "It just works" is what I've read across so many forum posts here and there.

I assume, that someone from Apple has all the knowledge and just fixed it silently.

I hope, that your issue is fixed as well.

Wish you all the best!

I'm having the exact same problem here. I'm trying to get my game approved for BETA testing but the app was already rejected many times because of this. I believe the reviewers have a weird network setup because for all my test devices the authentication just works fine. After implementing Cloud Diagnostics logging yesterday, this is what I received in my logs:

09:39:34.309 [ERROR]: AuthenticateAsync -> 'Apple.GameKit.GameKitException: Code=3 Domain=GKErrorDomain Description=The requested operation could not be completed due to an error communicating with the server.
  at MyGame.Services.Backend.Impl.PlayFabAuthenticationService.LoginWithGameCenterAsync () [0x00000] in <00000000000000000000000000000000>:0 
  at System.Threading.ExecutionContext.RunInternal (System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, System.Object state, System.Boolean preserveSyncCtx) [0x00000] in <00000000000000000000000000000000>:0 
  at System.Runtime.CompilerServices.AsyncMethodBuilderCore+MoveNextRunner.Run () [0x00000] in <00000000000000000000000000000000>:0 
  at System.Threading.Tasks.AwaitTaskContinuation.RunCallback (System.Threading.ContextCallback callback, System.Object state, System.Threading.Tasks.Task& currentTask) [0x00000] in <00000000000000000000000000000000>:0 
  at System.Threading.Tasks.Task.FinishContinuations () [0x00000] i

and after they retry to sign in:

09:39:48.325 [ERROR]: AuthenticateAsync -> 'Apple.GameKit.GameKitException: Code=37 Domain=GKErrorDomain Description=This game is not listed in a marketplace that supports Game Center.
  at MyGame.Services.Backend.Impl.PlayFabAuthenticationService.LoginWithGameCenterAsync () [0x00000] in <00000000000000000000000000000000>:0 
  at System.Threading.ExecutionContext.RunInternal (System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, System.Object state, System.Boolean preserveSyncCtx) [0x00000] in <00000000000000000000000000000000>:0 
  at System.Runtime.CompilerServices.AsyncMethodBuilderCore+MoveNextRunner.Run () [0x00000] in <00000000000000000000000000000000>:0 
  at System.Threading.Tasks.AwaitTaskContinuation.RunCallback (System.Threading.ContextCallback callback, System.Object state, System.Threading.Tasks.Task& currentTask) [0x00000] in <00000000000000000000000000000000>:0 
  at System.Threading.Tasks.Task.FinishContinuations () [0x00000] in <0000000000000000000000

It's really frustrating that nobody from the App Review team is able to give me some more details than just a screenshot of MY error. I hope this gets resolved somehow.

So after many different changes I bought an asset from the unity asset store. It’s the essentials kit from voxelbusters. They have written their own plugin to wrap the calls to GameKit. Unfortunately, it still doesn’t work on the reviewer devices.

The error messages are at least more detailed:

08:58:04.417 [ERROR]: GameServices_OnAuthStatusChange -> 'System.Exception: Authentication was not successful: Authenticated. Error: Error Domain: Code: 0 Description: Error Domain=GKErrorDomain Code=3 "The requested operation could not be completed due to an error communicating with the server." UserInfo={GKServerStatusCode=5172, NSLocalizedDescription=The requested operation could not be completed due to an error communicating with the server., NSUnderlyingError=0x300fd28e0 {Error Domain=GKServerErrorDomain Code=5172 "status = 5172, Game Center services not supported for apps not listed in App Store" UserInfo={GKServerStatusCode=5172, NSLocalizedFailureReason=status = 5172, Game Center services not supported for apps not listed in App Store}}}'

08:59:50.535 [ERROR]: GameServices_OnServerCredentialsLoaded -> 'System.Exception: Loading server credentials was not successful. Error: Error Domain: Code: 0 Description: Error Domain=GKErrorDomain Code=6 "The requested operation could not be completed because local player has not been authenticated." UserInfo={NSLocalizedDescription=The requested operation could not be completed because local player has not been authenticated.}'

This is the proof that it’s an issue on the Apple servers. I assume that the reviewers are testing against a production environment, but the builds installed via TestFlight are connecting to some kind of pre-prod environment. Even though Apple states that the deprecation of the sandbox with iOS 9 merged those separate instances, this sounds like the most logical explanation (to me).

I also created a code-level support ticket a week ago, but haven’t received any response or status update yet.

Have you had any successes?

So I now got another response from the support (which is even more disappointing):


This error means your app is not listed in the marketplace you are trying to access. This is not something you can remedy at code level in your app, but on AppstoreConnect or the marketplace you are using your app with.

Rico

Software Engineer, Apple Inc.


I'm speechless.

Short update from my side: I've received a response yesterday where someone "higher" from the DTS Team apologized for this bad experience. At the same time he confirmed that they are the "wrong" team to support with the plugin and referred me to the following page:

https://github.com/apple/unityplugins/blob/main/Documentation/Feedback.md

He basically said, that the Feedback Assistant would have been the correct team to contact, but because it already took so long, he now wants to ensure that my issue gets solved.

While waiting, I noticed in the last couple of days that there were some new accounts created in my PlayFab backend. I have shared a link to my public beta here and there but during this whole "situation" I always noticed some Chinese player names in my Unity Diagnostics. So I assume those Chinese players are basically Apple employees because I've never shared my links in China and they were the only ones who got those beautiful GameKit errors.

Meanwhile I also randomly updated the leaderboards and achievements by adding or deleting one here and then because I read that this could sometimes "wake up" GameCenter in production. I did this multiple times throughout the last couple of weeks.

So either, someone at Apple has installed my game via TestFlight (unlikely) or anyone there (or the random changes) might have fixed my GameCenter setup. I don't want to confirm that it's working yet.

After the response yesterday, I immediately published a new build and submitted it for the beta review. Usually they take about a day or two, but yesterday it was approved within TWO MINUTES!

By the way, I had already created a ticket via the Feedback Assistant about two weeks ago. This morning I received a response, that the issue seems to be solved as my latest build was approved for beta testing. This all sounds completely "fishy" to me and I really don't know what to expect from the production approval now, but I keep you updated.

EDIT: I guess they've set a flag somewhere in my app, because at the moment every beta review is "skipped" and instantly approved.

Accepted Answer

Finally, I was able to upload a release candidate (version 1.0.0) Friday night. Fingers crossed, they've again rejected my app, but this time it was due to another error unrelated to the GameCenter login.

After checking the PlayFab instance, I also saw that there was a NEW account created. 📣📣📣📣

Eventually, I found out that PlayFab has a hard limit when it comes to the player's display name which is 25 characters in length. This was also the reason why it crashed this time.

My logs showed that the player name was "Frank Lion of Hairy Outpost".

I assume that's some kind of "default" name suggestion whenever you have no GameCenter account yet.

Nevertheless, all I can tell is that it finally works and Apple did neither admit that they have had an issue nor that it was my fault. "It just works" is what I've read across so many forum posts here and there.

I assume, that someone from Apple has all the knowledge and just fixed it silently.

I hope, that your issue is fixed as well.

Wish you all the best!

Unity Apple Plugin GameKit Error 37 when sending build to app review
 
 
Q