Create apps that allow players to interact with each other using GameKit.

GameKit Documentation

Post

Replies

Boosts

Views

Activity

GameCenter scores are not being posted to the leaderboard
Hello! Bare with me here, as there is a lot to explain! I am working on implementing a Game Center high score leaderboard into my game. I have looked around for examples of how to properly implement this code, but have come up short on finding much material. Therefore, I have tried implementing it myself based off information I found on apples documentation. Long story short, I am getting success printed when I update my score, but no scores are actually being posted (or at-least no scores are showing up on the Game Center leaderboard when opened). Before I show the code, one thing I have questioned is the fact that this game is still in development. In AppStoreConnect, the status of the leaderboard is "Not Live". Does this affect scores being posted? Onto the code. I have created a GameCenter class which handles getting the leaderboards and posting scores to a specific leaderboard. I will post the code in whole, and will discuss below what is happening. PLEASE VIEW ATTACHED TEXT TO SEE THE GAMECENTER CLASS! GameCenter class - https://developer.apple.com/forums/content/attachment/0dd6dca8-8131-44c8-b928-77b3578bd970 In a different GameScene, once the game is over, I request to post a new high score to Game Center with this line of code: GameCenter.shared.submitScore(id: GameCenterLeaderboards.HighScore.rawValue) Now onto the logic of my code. For the longest time I struggled to figure out how to submit a score. I figured out that in Xcode 12, they deprecated a lot of functions that previously worked for me. Not is seems that we have to load all leaderboards (or the ones we want). That is the purpose behind the leaderboards private variable in the Game Center class. On the start up of the app, I call authenticate player. Once this callback is reached, I call loadLeaderboards which will load the leaderboards for each string id in an enum that I have elsewhere. Each of these leaderboards will be created as a Leaderboard object, and saved in the private leaderboard array. This is so I have access to these leaderboards later when I want to submit a score. Once the game is over, I am calling submitScore with the leaderboard id I want to post to. Right now, I only have a high score, but in the future I may add a parameter to this with the value so it works for other leaderboards as well. Therefore, no value is passed in since I am pulling from local storage which holds the high score. submitScore will get the leaderboard from the private leaderboard array that has the same id as the one passed in. Once I get the correct leaderboard, I submit a score to that leaderboard. Once the callback is hit, I receive the output "Successfully submitted score to leaderboard". This looks promising, except for the fact that no score is actually posted. At startup, I am calling updatePlayerHighScore, which is not complete - but for the purpose of my point, retrieves the high score of the player from the leaderboard and is printing it out to the console. It is printing out (0), meaning that no score was posted. The last thing I have questions about is the context when submitting a score. According to the documentation, this seems to just be metadata that GameCenter does not care about, but rather something the developer can use. Therefore, I think I can cross this off as causing the problem. I believe I implemented this correctly, but for some reason, nothing is posting to the leaderboard. This was ALOT, but I wanted to make sure I got all my thoughts down. Any help on why this is NOT posting would be awesome! Thanks so much! Mark
8
1
4.6k
Dec ’20
Cannot get Nintendo Switch Joycon accelerator motion data in iOS 16
Now I am using iOS 16 beta 6, I can get buttonA/buttonB is pressed event. but cannot get accelerator motion data info.      //work     buttonA?.valueChangedHandler = {(_ button: GCControllerButtonInput, _ value: Float, _ pressed: Bool) -> Void in       print(">>> ButtonA tapped")     }     //work     buttonB?.valueChangedHandler = {(_ button: GCControllerButtonInput, _ value: Float, _ pressed: Bool) -> Void in       print(">>> ButtonB tapped")     }           // this is not works     gameController.motion?.valueChangedHandler = { (motion: GCMotion)->() in       print(">>>> motion data \(motion.acceleration.x) \(motion.acceleration.y) \(motion.acceleration.z)")       if let delegate = self.motionDelegate {         delegate.motionUpdate(motion: motion)       }     } Is there any plan to support this?
4
3
2.9k
Aug ’22
GKLocalPlayer save and fetch data to iCloud issue
Hi all I have two mystic issues with saving and fetching data to and from iCloud. Both repro only after first launch of an app. 1. [GKLocalPlayer fetchSavedGamesWithCompletionHandler:] After first attempt I can see 0 saved games (but i know that there is at least one saved game) and there is no any error. In case if I try fetch one more time (without any additional actions) even immediately after first attempt I receive saved games correctly (not 0) 2. [GKLocalPlayer saveGameData: withName: completionHandler:] After first attempt I can see error The requested operation could not be completed because local player has not been authenticated. In case if I try save one more time (without any additional actions) even immediately after first attempt I can save data successfully without any error I found the same issue in StackOverflow, but there are no fixes...
4
1
1.1k
Oct ’22
Transferring Apps with iCloud KVS
Hi All! I'm being asked to migrate an app which utilizes iCloud KVS (Key Value Storage). This ability is a new-ish feature, and the documentation about this is sparse [1]. Honestly, the entire documentation about the new iCloud transfer functionality seems to be missing. Same with Game Center / GameKit. While the docs say that it should work, I'd like to understand the process in more detail. Has anyone migrated an iCloud KVS app? What happens after the transfer goes through, but before the first release? Do I need to do anything special? I see that the Entitlements file has the TeamID in the Key Value store - is that fine? <key>com.apple.developer.ubiquity-kvstore-identifier</key> <string>$(TeamIdentifierPrefix)$(CFBundleIdentifier)</string> Can someone please share their experience? Thank you! [1] https://developer.apple.com/help/app-store-connect/transfer-an-app/overview-of-app-transfer
4
0
1.9k
May ’23
Game Center authenticateHandler on visionOS
GKLocalPlayer.local.authenticateHandler = {viewController, error in When authenticating a player using authenticateHandler, the completion handler is only called if the player is already logged in. If the player is not logged in, the authentication window will appear but the completion handler is never called. If I have content in a volumetric window that obscures the login window (which appears at a slight Z increase from the parent window), what can I do? If the completion handler was being called then I could make adjustments to my view, but it never gets called if the user is not already logged in. https://developer.apple.com/documentation/gamekit/authenticating_a_player Thanks.
1
1
698
Feb ’24
Using video chat instead of voice chat on online game ?
Hello, I am building an app that requires players joined to an online game session and to have a video chat with both of their front cameras turned on. I currently know that GameKit supports the voice chat option but could not find any source for video chat. Is it possible set up a video chat on an online game session?. What libraries can I use that have support in implementing the video chat (AVFoundation) ? Your assistance is greatly appreciated.
2
0
1.1k
Feb ’24
GKLocalPlayer.local.isMultiplayerGamingRestricted not representing all relevant scenarios?
I need clarification on the GKLocalPlayer.local.isMultiplayerGamingRestricted behavior which check's user's device capability (whether it is set up to allow or disallow multiplayer) I am referring to this from Apple documentation at : https://developer.apple.com/documentation/gamekit/authenticating_a_player if GKLocalPlayer.local.isMultiplayerGamingRestricted { // Disable multiplayer game features. } The issue is that this is a boolean (true/false value ) However I have noticed that iOS ( latest version and preceding versions) allow people to have the following options: ( you can set these under screen time -> content restrictions -> Multiplayer games ) Disallow all multiplayer games - presumably your API returns a false for this. Allow multiplayer with friends only -???? what does GKLocalPlayer.local.isMultiplayerGamingRestricted return here?? if True, how is the Friends only restriction handled? Are we supposed to do something to force it? Note: So far I am relying on Apple's Game Center native experience and have not added wrappers to do additional filtering etc. I hope that I shall be able to keep doing so. Allow all multiplayer games - presumably your API returns a false for this. You can see how there are three choices but this is modeled as a boolean. Choice number 2. is not addressed. Has anyone come across this? Note: This is very different from checking for underage users. No matter what I do, in my post above, it won't set the correct numbers for numbered bullet -points. I call them 1, 2, 3 it posts 1,1,2 or 1.,2,1 etc. ( side nit ) Apologies if this isn't as readable as it should be.
1
0
1.6k
Mar ’24
Issues using xbox 360 controller on Macbook Air
Hi all, I have a macbook air 2022 with the M2 chip inside. I am trying to use a wired xbox 360 controller to play games on steam. However, whenever I try to plug it it, the light shines green for a little bit and then turns off. I checked in my usb device tree through the system report and it says that there is a controller plugged in. The controller doesn't work in the game either, are there any fixes? I am also on macOS Monterey version 12.4
0
0
937
Mar ’24
USB HID Specifics for Mac OS?
I am currently developing an USB HID Device, specifically a type of Joystick. However it seems that any attempt of getting a joystick to work on Mac do not work. My prototype works perfectly on Windows, being recognised as such and receiving all data. On MacOS, the Joystick is not recognised as a Joystick though, and the OS does not seem to receiver any Input from it whatsoever. I have translated my code to use both Mouse and Keyboard, both work perfectly. I have also tried to have the Joystick identify as a Gamepad, but again, it works on Windows and is not recognised on Mac (is not recognised as a Gamepad). Are there any specific restrictions to HID devices on MacOS? Apple developer only seems to describe specifics from a software standpoint, not from the standpoint of someone developing hardware. And even then it only seems to describe very specific HID devices, such as mouse, keyboard or a stylus. Please also keep in mind that I don't have much experience developing MacOS applications.
2
0
1.7k
Mar ’24
I delete Gaming Port Kit and want to redownload it again, than it happened.
I've installed the GPTK before, but it pops up with some problems so I want to reinstall it again. So I deleted home brew and redownload all the materials I needed. But when it comes to install the game-porting-toolkit formula, I can't download it, did anyone have the same problem with me? jimmy@Jimmymbp14 ~ % brew -v install apple/apple/game-porting-toolkit Error: Formulae found in multiple taps: * apple/apple/game-porting-toolkit-compiler * gcenx/apple/game-porting-toolkit-compiler Please use the fully-qualified name (e.g. apple/apple/game-porting-toolkit-compiler) to refer to a specific formula. jimmy@Jimmymbp14 ~ %
0
0
996
Mar ’24
Compatibility Inquiry: 8BitDo Ultimate 2.4G Wireless Controller on macOS
Hi there, I'm reaching out to inquire about compatibility restrictions regarding the 8BitDo Ultimate 2.4G Wireless Controller on macOS systems, particularly its functionality with third-party applications such as Construct 3, a browser-based game development software. As an indie game developer, I recently acquired the 8BitDo Ultimate controller for its touted compatibility and functionality. While I've primarily used it in Bluetooth mode on my Mac without encountering any significant issues, I've stumbled upon a peculiar problem when using the controller while developing projects in Construct 3, specifically within the preview mode of the game engine. In attempting to test my projects using Construct 3's preview feature, the controller fails to detect any of my inputs. This is particularly confounding as the controller operates flawlessly when I export a proper macOS build of the game from the engine and play it externally. To further investigate, I experimented with Nintendo Switch Joy-Cons, which surprisingly worked seamlessly without encountering any issues during testing within Construct 3's preview mode. Upon reaching out to both Construct 3 and 8BitDo customer support, I was informed that the compatibility restriction with third-party controllers on macOS is due to limitations imposed by Apple, which are beyond their control. Consequently, I sought assistance from Apple Developer Program Support, who directed me to contact the Code-level Technical Support team or inquire on the developer forum. The lack of compatibility with crucial development tools like Construct 3 significantly hampers my workflow as an indie developer, and I'm eager to find a resolution to this issue. Thank you for your time, and I'm hopeful that someone within the community might be able to provide guidance on this matter.
4
0
2.5k
Mar ’24
New Game Center Sign In Screen: How to know when it is presented, covering my app?
Recently (I'm not sure exactly when), the "Sign in to Game Center" banner started appearing at the top of my app when the app sets the GC authentication handler and there is no Game Center player currently signed in on the device: So far so good. But if the banner is tapped, a full "Sign In to Game Center" modal view automatically appears and covers the app without notification: This is not the sign-in view controller that the GC authentication handler normally passes when a player is not signed in, which previously gave my app control over when to present it. My app is unaware that it is covered by this new sign-in screen. Is there any way for my app to know when the user taps the "Sign In" banner and causes this new automatic sign-in screen to appear? I need to pause my game while it is covered up. In general, is there a way for my view controller to be notified when it has been covered by a modal view controller that's outside my app's control?
0
1
688
Mar ’24
Test Game Center integration for new game
Hi! I have a new game and I have setup the leaderboards and achievements in App Store Connect but all of them are "not live" and in console I see this warning: "No AchievementDescription could be found for Achievement with ID: {my_ID}" I did not do a fresh Game Center setup for a long time, but is there any way to test if achievements and leaderboards are working for nonreleased game? Thank you!
3
1
1.4k
Apr ’24
NSOutlineView leaks lots of NSTableRowView objects
I have a two-level view-based NSOutlineView, employing a data-source and delegate. It is not populated by binding. My code is all ObjC, and my problem persist since MacOS 10.11 to the current MacOS 14.4.x Because of some specific visual issue, I use a very simple subclass of NSTableRowView, which has only this: @implementation MYRowView - (void)drawRect:(NSRect)dirtyRect { self.emphasized = NO; // this affects the complicated color scheme for selection - will not use the "alternateColor" for drawing, but rather the "secondary color" - who knows what it is. This way our texts and icons and progress do NOT disappear on selected rows. [super drawRect:dirtyRect]; } @end And then later, in my NSOutlineView delegate: -(NSTableRowView *)outlineView:(NSOutlineView *)outlineView rowViewForItem:(id)item { return [OITRowView new]; } There are, other more complicated @interface OITOutlineCellView : NSTableCellView That I makeViewWithIdentifier:owner: and populate in response to NSOutlineView - (NSView *)outlineView:(NSOutlineView *)outlineView viewForTableColumn:(NSTableColumn *)tableColumn item:(id)item { Now I noticed that after adding several items (top level) with some thousands sub-level items to my outline-view, and then REMOVING them and reloading all data - my app's memory is ever increasing When I used the memory graph feature in Xcode debugger - I found a huge number (actually identical to the maximum number of rows) - all of the class MYRowView. Interestingly enough - none of my cell-views remained in memory. Now I verified - my data source reported zero items, the UI looks empty, and all functions as expected - except for this "leak" of MYRowView objects. As you can see in the code (copied exactly from my app) I only create them - and return them to the OS - I never hold any reference to these objects. So.... What Am I doing wrong, and what can I do to alleviate the issue?? The methods [NSOutlineView reloadItem:reloadChildren:] and [NSTableView reloadData] are documented to "release all related views" -- but obviously they DONT. my app gets to ~300 MB (started at 20MB) with about 7500 rows Idea anyone? What to check? what to try?
1
1
715
Apr ’24
GameKit authentication not working on Intel based devices
Hello, As stated in the title, we implemented the GameKit unity package. We did a lot of testing and never encountered any issue related to the authentication until now, andwe identified that the device with the issue was Intel. The configurations and provisioning profile used are correctly set. I was wondering if any of you encountered this issue or had an idea how to debug this? Thanks!
0
1
742
Apr ’24
apple/apple/game-porting-toolkit 1.1 did not build
My MacBook Pro is M3 max, running macOS 14.4.1 (23E224), with Xcode 15.3 and Command_Line_Tools_for_Xcode_15.3 installed. When I tried to execute "brew -v install apple/apple/game-porting-toolkit", it reported the following error. Error: apple/apple/game-porting-toolkit 1.1 did not build Logs: /Users/yuanmouren/Library/Logs/Homebrew/game-porting-toolkit/00.options.out /Users/yuanmouren/Library/Logs/Homebrew/game-porting-toolkit/01.configure /Users/yuanmouren/Library/Logs/Homebrew/game-porting-toolkit/01.configure.cc /Users/yuanmouren/Library/Logs/Homebrew/game-porting-toolkit/02.make /Users/yuanmouren/Library/Logs/Homebrew/game-porting-toolkit/wine64-build If reporting this issue please do so to (not Homebrew/brew or Homebrew/homebrew-core): apple/apple I found the following error reasons in the console. /private/tmp/game-porting-toolkit-20240414-2133-st99bv/wine/dlls/crypt32/unixlib.c:629:11: error: unknown type name 'SecTrustSettingsDomain' const SecTrustSettingsDomain domains[] = { ^ /private/tmp/game-porting-toolkit-20240414-2133-st99bv/wine/dlls/crypt32/unixlib.c:630:9: error: use of undeclared identifier 'kSecTrustSettingsDomainSystem' kSecTrustSettingsDomainSystem, ^ /private/tmp/game-porting-toolkit-20240414-2133-st99bv/wine/dlls/crypt32/unixlib.c:631:9: error: use of undeclared identifier 'kSecTrustSettingsDomainAdmin' kSecTrustSettingsDomainAdmin, ^ /private/tmp/game-porting-toolkit-20240414-2133-st99bv/wine/dlls/crypt32/unixlib.c:632:9: error: use of undeclared identifier 'kSecTrustSettingsDomainUser' kSecTrustSettingsDomainUser ^ /private/tmp/game-porting-toolkit-20240414-2133-st99bv/wine/dlls/crypt32/unixlib.c:640:18: warning: this function declaration is not a prototype [-Wstrict-prototypes] status = SecTrustSettingsCopyCertificates(domains[domain], &certs); ^ /private/tmp/game-porting-toolkit-20240414-2133-st99bv/wine/dlls/crypt32/unixlib.c:641:23: error: use of undeclared identifier 'noErr' if (status == noErr) ^ /private/tmp/game-porting-toolkit-20240414-2133-st99bv/wine/dlls/crypt32/unixlib.c:647:31: warning: this function declaration is not a prototype [-Wstrict-prototypes] if ((status = SecItemExport(cert, kSecFormatX509Cert, 0, NULL, &certData)) == noErr) ^ /private/tmp/game-porting-toolkit-20240414-2133-st99bv/wine/dlls/crypt32/unixlib.c:647:51: error: use of undeclared identifier 'kSecFormatX509Cert' if ((status = SecItemExport(cert, kSecFormatX509Cert, 0, NULL, &certData)) == noErr) ^ /private/tmp/game-porting-toolkit-20240414-2133-st99bv/wine/dlls/crypt32/unixlib.c:647:95: error: use of undeclared identifier 'noErr' if ((status = SecItemExport(cert, kSecFormatX509Cert, 0, NULL, &certData)) == noErr) ^ 2 warnings and 7 errors generated. make: *** [dlls/crypt32/unixlib.o] Error 1 make: *** Waiting for unfinished jobs.... How should I resolve this issue?
5
1
3.8k
Apr ’24