Game Center save game data to iCloud

We are trying to implement saving and fetching data to and from iCloud, but it have some problems.

MacOS: 15.3

Here is what I do:

  1. Enable Game Center and iCloud capbility in Signing & Capabilities, pick iCloud Documents, create and select a Container.

  2. Sample code:

void SaveDataToCloud( const void* buffer, unsigned int datasize, const char* name )
{
    if(!GKLocalPlayer.localPlayer.authenticated) return;

    NSData* data = [ NSData dataWithBytes:databuffer length:datasize];
    NSString* filename = [ NSString stringWithUTF8String:name ];
    [[GKLocalPlayer localPlayer] saveGameData:data withName:filename completionHandler:^(GKSavedGame * _Nullable savedGame, NSError * _Nullable){
        if (error != nil)
        {
            NSLog( @"SaveDataToCloud error:%@", [ error localizedDescription ] );
        }
    }];
}

void FetchCloudSavedGameData()
{
    if ( !GKLocalPlayer.localPlayer.authenticated ) return;
    [ [ GKLocalPlayer localPlayer ]  fetchSavedGamesWithCompletionHandler:^(NSArray<GKSavedGame *> * _Nullable savedGames, NSError * _Nullable error) {
			if ( error == nil )
			{
				for ( GKSavedGame *item in savedGames )
				{
					[ item loadDataWithCompletionHandler:^(NSData * _Nullable data, NSError * _Nullable error) {
						if ( error == nil )
						{
                    //handle data
						}
						else
						{
							NSLog( @"FetchCloudSavedGameData failed to load iCloud file: %@, error:%@", item.name, [ error localizedDescription ] );
						}
					} ];
				}
			}
			else
			{
				NSLog( @"FetchCloudSavedGameData error:%@", [ error localizedDescription ] );
			}
		} ];
}

Both saveGameData and fetchSavedGamesWithCompletionHandler are not reporting any error, when debugging, saveGameData completionHandler got a nil error, and can get a valid "savedGame", but when try to rebot the game and use "fetchSavedGamesWithCompletionHandler" to fetch data, we got nothing, no error reported, and the savedGames got a 0 length.

From this page https://developer.apple.com/forums/thread/718541?answerId=825596022#825596022 we try to wait 30sec after authenticated , then try fetchSavedGamesWithCompletionHandler, still got the same error.

Checked:

  1. Game Center and iCloud are enabled and login with the same account.
  2. iCloud have enough space to save.

So what's wrong with it.

Hello,

Try the sample code in Saving the player’s game data to an iCloud account to see if you can get a successful result. You can use your game's save data.

Game Center save game data to iCloud
 
 
Q