Я создал плагин для iOS, который собирает аудиоданные и передает их слушателю в виде потока байтов.Он работал безупречно в эмуляторе и на разных устройствах, но на iPhone 6 под управлением iOS 11.3 во время инициализации происходит сбой.Я отследил проблему с этим кодом:
let session = AVAudioSession.sharedInstance()
do {
try session.setCategory(AVAudioSessionCategoryPlayAndRecord)
try session.setPreferredInputNumberOfChannels(1) // This is the line that is throwing
try session.setPreferredIOBufferDuration(65)
} catch {
print(error.localizedDescription) // Prints: The operation couldn’t be completed. (OSStatus error -50.)
return -1
}
Как видно из комментария, ошибка вызвана вызовом session.setPreferredIOBufferDuration
.Глядя на документацию, он говорит, что вызов будет сброшен, если введенный номер больше session.maximumInputNumberOfChannels
, и, судя по сообщению об ошибке, похоже, это так.Проверяя это значение на этом телефоне, он возвращает 0.
Что будет причиной того, что это значение будет 0?Насколько я могу судить, я не думаю, что это проблема с разрешениями, поскольку я запрашиваю разрешения для микрофона до того, как приложение достигнет этой точки в коде.Единственное, о чем я могу думать, это то, что телефон по существу не имеет возможностей микрофона ... но это телефон , поэтому включение микрофона кажется довольно стандартным.
РЕДАКТИРОВАТЬ: Iвытащил iPad Air с iOS 12, и у него та же проблема.