fserrazes/gamecenterkit
A Swift package for iOS that wraps GameKit with support for UIKit and SwiftUI.
Swift Package Manager
Add the following to your package dependencies:
.package(url: "https://github.com/fserrazes/GameCenterKit.git", branch: "main")
Usage
Requirements
- The local player must be authenticated on Game Center
2. Your app must have a leaderboard identifier defined in App Store Connect.
Authenticate Player
Authenticates the local player with Game Center (must be done before other actions).
Completion-based API:
GameCenterKit.shared.authenticate { isAuthenticated in
if isAuthenticated {
// Local player is authenticated
} else {
// Local player is not authenticated
}Async/await API:
let state = await GameCenterKit.shared.authenticate()Present Game Center UI
There are 3 options:
1. Toggle AccessPointView 2. Present from a ViewController (UIKit) 3. Present from a View (SwiftUI)
Toggle AccessPointView
GameCenterKit.shared.toggleGameAccessPointView()UIKit Example
do {
try GameCenterKit.shared.showGameCenter(viewController: self)
} catch {
print(error)
}SwiftUI Example
import SwiftUI
import GameCenterKit
struct ContentView: View {
@State var isGameCenterOpen: Bool = false
var body: some View {
VStack {
Button("Open GameCenter View") {
isGameCenterOpen = true
}
.buttonStyle(.borderedProminent)
.padding()
}
.sheet(isPresented: $isGameCenterOpen) {
GameCenterView()
}
}
}Leaderboards
Define your leaderboard identifier:
let identifierId: String = "your-app-leaderboard-id"Retrieve Score
The score earned by the local player (time scope defined is all time).
if let score = try await GameCenterKit.shared.retrieveScore(identifier: identifierId) {
print("best score: \(String(describing: score))")
}Retrieve Rank
The rank earned by the local player (time scope defined is all time).
do {
let (current, previous) = try await GameCenterKit.shared.retrieveRank(identifier: identifierId)
print("current rank: \(String(describing: current))")
print("previous rank: \(String(describing: previous))")
} catch {
print(error)
}Retrieve Best Players
The best players list and the number of total players (time scope defined is all time).
```swift let topPlayers = 10 // Number of top players (1–50)
do { let (players, totalPlayers) = try await GameCenterKit.shared.retrieveBestPlayers( identifier: identifierId, topPlayers: topPlayers ) print("total players: \(String(describing: totalPlayers))")
for player in players { print("player: \(player.displayName)\t score: \(player.leaderboard.score)") } } catch { print(error) }
### Submit Score
let score: Int = 10
do { try await GameCenterKit.shared.submitScore(score: score, identifier: identifierId) } catch { print(error) }
Achievements
Define your achievement identifier:
let achievementId: String = "your-app-achievement-id"Submit Achievement
let percent = 10.0 // Progress value (0–100)
do {
try await GameCenterKit.shared.submitAchievement(identifier: achievementId, percent: percent)
} catch {
print(error)
}Reset Achievements
Resets the percentage completed for all of the player’s achievements.
do {
try await GameCenterKit.shared.resetAchievements()
} catch {
print(error)
}Documentation
Package Metadata
Repository: fserrazes/gamecenterkit
Default branch: main
README: README.md