I'm really hoping I'm wrong about this, but from what I can tell, GameKit hosted matchmaking simply does not work if a player invites some friends into a match but leaves some slots open for automatches. I can get each case to work individually, but when mixed, no one can connect.
Consider three players: A, B, and C. A invites B into the match and leaves a third slot open. C chooses to be matched into a three player game.
Now, when B processes the invite from A (by virtue of having registered an inviteHandler on GKMatchmaker), he contacts the hosting server to connect and sets his player ready state. Player A will then get a delegate message to matchmakerViewController:didReceiveAcceptFromHostedPlayer: saying that B has connected. In a two player game, B could at this point start the game and proceed. Instead, clicking the "Play Now" button causes the match-maker to wait for a third player to arrive.
Meanwhile Player C has chosen to be added to a match automatically. If A and B had also asked to be added automatically, all three would then be notified of the match via the delegate matchmakerViewController:didFindPlayers: method. Instead, however, clicking the "Play Now" button causes the match-maker to wait... forever. Player A is also waiting... forever. Player B knows only about the inviter, player A, so he could in theory try to start the game, but it would be pointless since A only knows about some of the participants.
It's hard for me to believe the system could have such a catastrophic flaw, but I've run this scenario, and traced all the delegate methods exposed in the relevant GameKit classes, and when the players get into their infinite-waiting state there are no delegate messages sent. It's as if GameCenter does not fully know about the existence of A and B, which would help explain why A has to explicitly mark B as present in the view controller despite obviously having been visible "enough" to have received the invite in the first place. I've also tried having player C request only a two-player game, on the idea that perhaps this meant that Player A counted as only one "visible" player.
Does anyone have any direct experience with this API, and can claim explicitly that it works (or doesn't) for this use case? This is a serious issue for me; this pretty much means that I have to throw away my GameKit-based matchmaking code and write something completely from scratch.
Thanks in advance for any information.