This bug is still present in Xcode 11.6 beta on macOS 10.15.5.
Considering the properly setup delegate....(void)speechSynthesizer:(AVSpeechSynthesizer *)synthesizer willSpeakRangeOfSpeechString:(NSRange)characterRange utterance:(AVSpeechUtterance *)utterance...
In my case, when the system is speaking.. "....advisable to use the real...."
The word 'use' causes the character range to drift
020-07-03 10:34:53.965403-0700 parsing[5102:78169] word: advisable
2020-07-03 10:34:54.690781-0700 parsing[5102:78169] word: to
2020-07-03 10:34:54.840140-0700 parsing[5102:78169] word: the
2020-07-03 10:34:55.213452-0700 parsing[5102:78169] word: rea
Without code to catch the issue, I hit an exception when attempting to style text that shouldn't be out of range.
Changing to "to use" to "using" gets around the display bug. Although it gets around the issue, I'm having to change text that I should not be changing...