Game center in tvOS does not appear

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:

enter image description 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) } 
+5
source share
1 answer

Make sure you have an “Apple TV toolbar image” in your app’s asset catalog. The toolbar cover should be 923x150 with transparency, and it does not need to be overlaid because the user cannot select it.

The tvOS human interface guides claim the toolbar cover is optional, but in my experience the GKGameCenterViewController will refuse to appear, t have one.

0
source

Source: https://habr.com/ru/post/1238904/


All Articles