Back in 2015 when I first launched Grabble Words, it made sense to use Parse for the Play With Friends feature. Since then playing with friends has been a major maintenance headache – first Parse.com shut down, so I migrated to using Parse server with herokuapp and mongodb. Then there was updating push certificates annually and the admin involved. Then Facebook App Invites were deprecated which was how friends were invited to play. Aargh!
Farewell Parse/HerokuApp/MongoDB…
All of this maintenance became too much on top of other work so several years ago I made the difficult decision to disable Play With Friends, and leave Grabble Words stripped back to just Pass n Play and Play the Grabot…

Hello GameKit!
But! Good news – this year Play With Friends is back! It now uses GameKit and GameCenter to manage playing with friends and turn based play.
What I needed was small. Two players, asynchronous, one board snapshot, a list of games, and a nudge when it is your turn. That is a GKTurnBasedMatch. Leaderboards and achievements for Grabble Words were already live in App Store Connect, so this wasn’t a new account or a new backend.
A match is a Codable payload stored in matchData — the board, the two names and player IDs, and the rules you picked at the start – short game or long, whether a longer word beats a faster one, how fussy stealing is, and the language. There is no server of mine on that path. You invite a Game Center friend, play your words, and the match is handed over.
There were a few new challenges using GameKit:
An invite could show up in the Game Center app while loadMatches still returned nothing, so Grabble Words never listed the game. The inviting device now writes the match ID into a CloudKit public record, keyed by the invitee’s Game Center player ID, with a query subscription on that record. When the push arrives, the other device loads the match with GKTurnBasedMatch.load(withID:) instead of waiting for GKTurnBasedMatch.loadMatches to notice.
Game Center’s own reminder has a similar trap. sendReminder only works while you are still the current participant. I was sending it after endTurn, and Apple ignored it. The reminder goes out first. Then the turn is passed.
Finally, Play With Friends is Back!
Once an iPhone and an iPad could finish a game, I was finally able to unlink Parse and Facebook. Launch no longer talks to graph.facebook.com or the old Heroku host. Finally, Play With Friends is Back!
If you want to try out Grabble Words, check it out here.
Leave a Reply