iOS13 does not install Daniel-compact AVSpeechSynthesisVoice

Hi,


I'm writing a speech language therapy app and we use the Daniel-compact UK english voice for all of our spoken content. This was always installed by default until iOS 13, where the voice now seems to be missing after the initial upgrade. Is this a bug with iOS 13 or an intentional thing? The iOS simulators all seem to have the voice installed but live devices that have been upgraded are missing it...


Is there a way of installing the voice automatically if it is missing and informing the user when this is done.


This is what I currently have:

A function that returns a boolean if it can find the correct voice:

func defaultSpeechSynthesisVoiceInstalled() -> Bool {
        guard AVSpeechSynthesisVoice(identifier: "com.apple.ttsbundle.Daniel-compact") != nil else {
            return false
        }
        return true
    }


and a simple ViewController that periodically checks if the voice has been installed.

class InstallSpeechSynthesisVoiceViewController: UIViewController {
    var timer: Timer!
    
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        
        print("Setting up voice check timer")
        timer = Timer.scheduledTimer(timeInterval: 5, target: self, selector: #selector(runTimer), userInfo: nil, repeats: true)
    }
    
    @objc func runTimer() {
        print("Running timer")
        
        if (self.defaultSpeechSynthesisVoiceInstalled() == true) {
            self.navigationController?.popViewController(animated: true)
        }
    }
    
}


In my testing it looked like just trying to instantiate a AVSpeechSynthesisVoice with a missing identifier will start the automatic download and installation of that voice. Is that right? I've released this update and now the app just sits and waits on this VC without popping the viewController.


I think the download gets started as you can see the Daniel voice has a play button in the Settings > Accessability > Spoken Content > Voices > English


The app doesn't seem to know about it until you quit and re-open, where the voice checking code now returns true.


What's making this really hard to debug is that I've run out of real devices to upgrade and test this on. You can't seem to delete the Daniel voice like you can with other voices. This re-inforces my view that Daniel is missing by mistake.


Has anyone got anything that might help here?