Game Center fetchSavedGames sometimes returns empty list of games, although it works correctly on the next tries

I have implemented the Game Center for authentication and saving player's game data. Both authentication and saving player's data works correctly all the time, but there is a problem with fetching and loading the data.

The game works like this:

  1. At the startup, I start the authentication
  2. After the player successfully logs in, I start loading the player's data by calling fetchSavedGames method
  3. If a game data exists for the player, I receive a list of SavedGame object containing the player's data

The problem is that after I uninstall the game and install it again, sometimes the SavedGame list is empty(step 3). But if I don't uninstall the game and reopen the game, this process works fine.

Here's the complete code of Game Center implementation:

class GameCenterHandler {
    public func signIn() {
        GKLocalPlayer.local.authenticateHandler = { viewController, error in
            if let viewController = viewController {
                viewController.present(viewController, animated: false)
                return
            }
            if error != nil {
                // Player could not be authenticated.
                // Disable Game Center in the game.
                return
            }
            
            // Auth successfull
            self.load(filename: "TestFileName")
        }
    }

    public func save(filename: String, data: String) {
        if GKLocalPlayer.local.isAuthenticated {
            GKLocalPlayer.local.saveGameData(Data(data.utf8), withName: filename) { savedGame, error in
                if savedGame != nil {
                    // Data saved successfully
                }
                if error != nil {
                    // Error in saving game data!
                }
            }
        } else {
            // Error in saving game data! User is not authenticated"
        }
    }

    public func load(filename: String) {
        if GKLocalPlayer.local.isAuthenticated {
            GKLocalPlayer.local.fetchSavedGames { games, error in
            
                if let game = games?.first(where: {$0.name == filename}){
                    game.loadData { data, error in
                        if data != nil {
                            // Data loaded successfully
                        }
                        if error != nil {
                            // Error in loading game data!
                        }
                    }
                } else {
                    // Error in loading game data! Filename not found
                }
            }
        } else {
            // Error in loading game data! User is not authenticated
        }
    }
}

I have also added Game Center and iCloud capabilities in xcode. Also in the iCloud section, I selected the iCloud Documents and added a container.

I found a simillar question here but it doesn't make things clearer.

Game Center fetchSavedGames sometimes returns empty list of games, although it works correctly on the next tries
 
 
Q