I don't known AVSpeechSynthesizer much, maybe what I said was not accurate.
I found that MPRemoteCommandCenter did only work after AVSpeechSynthesizer first spoke something, so I though maybe a workaround was invoking AVSpeechSynthesizer with speaking an empty word after the preparation had done.
let utterance = AVSpeechUtterance(string: "") // notice that initializing AVSpeechUtterance with empty string
utterance.rate = 0.5
utterance.pitchMultiplier = 0.8
utterance.postUtteranceDelay = 0.2
utterance.volume = 0.8
utterance.voice = AVSpeechSynthesisVoice(language: "en-US")!
speechSynthesizer.speak(utterance)
After that, your MPRemoteCommandCenter may take control.