Сбой приложения при запросе разрешения на использование микрофона iPhone с iOS 11

Мое приложение падает, когда я пытаюсь запросить разрешение на использование микрофона iPhone со следующим кодом:

var permissionGranted = false
switch AVAudioSession.sharedInstance().recordPermission() {
case AVAudioSessionRecordPermission.granted:
    setupRecorder()
    permissionGranted = true
case AVAudioSessionRecordPermission.denied:
    permissionGranted = false
case AVAudioSessionRecordPermission.undetermined:
    AVAudioSession.sharedInstance().requestRecordPermission {
        [weak self] granted in
        if granted {
            self?.setupRecorder()
        }
    }
default:
    permissionGranted = false
    break
}

Я также добавил строку NSMicrophoneUsageDescription в Info.plist приложения. Когда я запускаю приложение, оно падает, и Xcode выводит сообщение об ошибке, в котором говорится, что мне нужно добавить NSMicrophoneUsageDescription в plist.


person Epsilon    schedule 14.10.2017    source источник
comment
Какое сообщение об ошибке вы получаете?   -  person Rashwan L    schedule 14.10.2017
comment
Обновите свой вопрос, указав соответствующую часть вашего Info.plist, чтобы убедиться, что у вас есть правильная запись для разрешения.   -  person rmaddy    schedule 14.10.2017
comment
Вы уверены, что в настройках сборки вашего проекта указан правильный путь к файлу info.plist?   -  person MEnnabah    schedule 14.10.2017
comment
@MEnnabah Я подозреваю, что ты прав. Я создал новый проект и добавил существующий код, и приложение заработало, как и ожидалось.   -  person Epsilon    schedule 14.10.2017
comment
Отлично, проверьте путь к файлу в настройках сборки   -  person MEnnabah    schedule 14.10.2017


Ответы (1)


Попробуйте использовать функцию «ниже»

 struct Manager {
    static var recordingSession: AVAudioSession!
    static var micAuthorised = Bool()        
}

func CheckForPermission()
    {
        Manager.recordingSession = AVAudioSession.sharedInstance()
        do
        {
            try Manager.recordingSession.setCategory(AVAudioSessionCategoryPlayAndRecord, with: .defaultToSpeaker)
//            try Manager.recordingSession.setPreferredSampleRate(16000)
//            try Manager.recordingSession.overrideOutputAudioPort(AVAudioSessionPortOverride.speaker)
//            try Manager.recordingSession.setActive(true)
            Manager.recordingSession.requestRecordPermission({ (allowed) in
                if allowed
                {
                    Manager.micAuthorised = true
                    print("Mic Authorised")
                }
                else
                {
                    Manager.micAuthorised = false
                    print("Mic not Authorised")
                }
            })
        }
        catch
        {
            print("Failed to set Category", error.localizedDescription)
        }
    }
person iOS Geek    schedule 02.01.2018