I currently have a Game Center running on my target iOS program but not working on the tvOS target system.
I already added Leaderboard images and put the identifier in Xcode here:

This is the class that I use to display the leaderboard and initiate the player. It is called GameKitHelper.swift:
import UIKit import Foundation import GameKit let PresentAuthenticationViewController = "PresentAuthenticationViewController" class GameKitHelper: NSObject { static let sharedInstance = GameKitHelper() var authenticationViewController: UIViewController? var gameCenterEnabled = false func authenticateLocalPlayer() { //1 let localPlayer = GKLocalPlayer() localPlayer.authenticateHandler = {(viewController, error) in if viewController != nil { //2 self.authenticationViewController = viewController NSNotificationCenter.defaultCenter().postNotificationName(PresentAuthenticationViewController, object: self) } else if error == nil { //3 self.gameCenterEnabled = true } } } func reportAchievements(achievements: [GKAchievement], errorHandler: ((NSError?)->Void)? = nil) { guard gameCenterEnabled else { return } GKAchievement.reportAchievements(achievements, withCompletionHandler: errorHandler) } func showGKGameCenterViewController(viewController: UIViewController) { guard gameCenterEnabled else { return } //1 let gameCenterViewController = GKGameCenterViewController() //2 gameCenterViewController.gameCenterDelegate = self //3 viewController.presentViewController(gameCenterViewController, animated: true, completion: nil) } func saveHighScore(identifier: String, score: Int) { if (GKLocalPlayer.localPlayer().authenticated) { let scoreReporter = GKScore(leaderboardIdentifier: identifier) scoreReporter.value = Int64(score) let scoreArray:[GKScore] = [scoreReporter] GKScore.reportScores(scoreArray, withCompletionHandler: { error -> Void in if (error != nil) { print("error") } else { print("Posted score of \(score)") } }) } } } extension GameKitHelper: GKGameCenterControllerDelegate { func gameCenterViewControllerDidFinish(gameCenterViewController: GKGameCenterViewController) { gameCenterViewController.dismissViewControllerAnimated(true, completion: nil) } }
NavigationController Class:
override func viewDidLoad() { super.viewDidLoad() NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("showAuthenticationViewController"), name: PresentAuthenticationViewController, object: nil) GameKitHelper.sharedInstance.authenticateLocalPlayer() } func showAuthenticationViewController() { let gameKitHelper = GameKitHelper.sharedInstance if let authenticationViewController = gameKitHelper.authenticationViewController { topViewController?.presentViewController(authenticationViewController, animated: true, completion: nil) } } deinit { NSNotificationCenter.defaultCenter().removeObserver(self) }
source share