MacOS 10.15: GKMatchmaker doesn't find a match for a random peer.

The following code works well with MacOS 10.14 (Mojave) for a random peer, however doesn't work for an invited player (invitations don't arrive). With MacOS 10.15 (Catalina) it's vice versa: it works with invited players, however doesn't find a match for a random peer. In my case the 'random' peer is on iPhone running iOS 13. The MacOS and iOS apps are linked in the AppStore.


Tried GKMatchmaker.shared() or local matchmaker. Tried recipients = nil and recepients = [] Whatever I do with Mac 10.15 behaves in same way: findMatch doesn't calls completion handler until I say gkMatchmaker.cancel(), after which the completion handler for findMatch is called with error -2.


I've put breakpoints at the places marked /* BP */. OK means that the control gets there, Never - code is never reached.

NetCommunicator and AgkPeerInvitationResponseProcessor are my own classes ('Agk' for Apple Game Kit) the meaning of which should be clear.


/* peer = nil. for a random peer */
func startMatchmaking(_ peer: GKPlayer?, _ responseProcessor: AgkPeerInvitationResponseProcessor?) {

  let request = GKMatchRequest().    /* BP.  OK */
  request.minPlayers = 2   // Including me
  request.maxPlayers = 2   // Including me
  request.defaultNumberOfPlayers = 2

  if let peer = peer {
       request.recipients = [peer]
  } else {
       request.recipients = nil.   // Tried also request.recipients = []
  }

  request.recipientResponseHandler = { peer, response in
                /* BP Never */
                guard let processor = responseProcessor else {return}.  
                switch response {
                           case .accepted:
                                 processor.agkInvitationAccepted(self, peer)
                                break

                          case .declined:
                                processor.agkInvitationDeclined(self, peer)
                               break

                         default:
                                 let error = NetCommunicator.makeError(code: .PeerInvitationError, description: "\(response) (\(response.rawValue))")
                                processor.agkInvitationError(self, peer, error)
                                break;
                 }
  }

/* BP. OK */
  let matchmaker = GKMatchmaker.shared().
  // Tried also let matchmaker = GKMatchmaker();  self.matchmaker = matchmaker

  matchmaker.findMatch(for: request, withCompletionHandler: {match, error in
            /* BP: Only after  GKMatchmaker.shared().cancel()  or self.matchmaker.cancel()  with error  */
             if let error = error {
                  self.delegate?.sessionError(self, error)
             } else
             if let match = match {
                 self.session = match
                  match.delegate = self
            }
       })

  }