Вы используете неправильный API.
URL(string:
- для строк, представляющих полный URL-адрес, включая схему (http://
, ftp://
, file://
).
Правильный API для путей к файлам, начинающихся с косой черты: URL(fileURLWithPath
.
Во-вторых NSSearchPathForDirectoriesInDomains
и конкатенация компонентов пути вручную устарели. Используйте API, связанный с URL, это, кстати, устраняет ошибку.
let documentsURL = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false)
let fileURL = documentsURL.appendingPathComponent("recordedVoice.wav")
Этот try!
не может аварийно завершить работу, поскольку ОС всегда создает папку с документами, если она не существует.
Для API, который может действительно throw
ошибок добавить обработку ошибок
do {
try session.setCategory(AVAudioSessionCategoryPlayAndRecord, with:AVAudioSessionCategoryOptions.defaultToSpeaker)
try audioRecorder = AVAudioRecorder(url: filePath!, settings: [:])
audioRecorder.delegate = self
...
} catch { print(error) }