As it turns out, I wasn’t correctly implementing the UITextInput protocol methods.
The methods that affect the speaking of typed/deleted letters are:
-textInRange:
-textRangeFromPosition:toPosition:
The properties that affect the speaking of typed/deleted letters are:
selectedTextRange
beginningOfDocument
endOfDocument