iOS/버그해결

iOS 16 업데이트 이후 발생한 TTS 버그 해결법(AVFoundation AVSpeechUtterance AVSpeechSynthesizer)

이주화_Coin 2022. 10. 6. 02:06

iOS 16 업데이트를 한 후 출시해두었던 앱들을(HangulKing, HangeulPuzzle) 확인하던 중 TTS가 동작하지 않아 사운드가 출력되지 않고 있는 버그를 확인했다.

 

iOS 16 업데이트 이후 발생하고 있는 문자열 출력 사운드 관련 버그는 AVSpeechSynthesizer가 함수 내에 local로 선언되어 있다면 함수가 종료될 때 할당이 즉시 해제되어 AVSpeechSynthesizer가 미쳐 speak를 끝까지 출력하지 못하기 때문에 발생하고 있었다.

 

그렇기에 AVSpeechSynthesizer를 함수 내에 local 변수로 선언하는 것이 아니라 instance로 선언하여 AVSpeechSynthesizer의 할당이 함수가 종료될 때 해제되지 않도록 하니 해결되었다.

func pronounce(_ letter: String) {
        let synthesizer = AVSpeechSynthesizer()
        let utterance = AVSpeechUtterance(string: letter)
        utterance.voice = AVSpeechSynthesisVoice(language: "ko-KR")

        utterance.volume = 30
        utterance.rate = 0.4
        synthesizer.speak(utterance)
}

let synthesizer = AVSpeechSynthesizer()

func pronounce(_ letter: String) {
        let utterance = AVSpeechUtterance(string: letter)
        utterance.voice = AVSpeechSynthesisVoice(language: "ko-KR")

        utterance.volume = 30
        utterance.rate = 0.4
        synthesizer.speak(utterance)
}

로 변경하여 해결하였다.