1 year ago

#2357

test-img

Vahe Hayrapetyan

GKAchievement.loadAchievements is always returning an empty array

GKAchievement.loadAchievements is always returning an empty array. It's authenticated with the local player, and GKAchievement.report works perfectly. I'm able to see the unlocked achievement in the Game Center.

Auth

func authPlayer(){
        let localPlayer = GKLocalPlayer.local
        localPlayer.authenticateHandler = {
            (view,error) in
            if view != nil {
                self.present(view!, animated: true, completion: nil)
            }
            else {
                print(GKLocalPlayer.local.isAuthenticated)
            }
        }
    }

Loading achievements


static func loadAchievements() {
        GKAchievement.loadAchievements(completionHandler: { achievements, error in
            if error != nil {
                print("Failed to load achievments", error as Any)
                return
            }
            for achievement in achievements! { // this is always an empty array
                let characterType = self.achievements[achievement.identifier]
                
                if characterType != nil  && achievement.isCompleted {
                    self.saveCharacterUnlock(character: .rabbit, type: characterType!)
                }
            }
        })
    }

Saving an achievement

static private func saveCharacterAchievement(type: Int) {
        let achievementName = achievements.first(where: { key, value in return value == type })?.key
        guard achievementName != nil else {
            return
        }
        let achievement = GKAchievement.init(identifier: achievementName!)
        achievement.percentComplete = 100
        GKAchievement.report([achievement], withCompletionHandler: {
            error in
            if error != nil {
                print("Failed to save achievement", error as Any)
            }
        })
    }

swift

game-center

achievements

0 Answers

Your Answer

Accepted video resources