#ios #avfoundation #ios-simulator
#iOS #avfoundation #ios-simulator
Вопрос:
Я использую его AudioUnit
для воспроизведения звука с сервера TeamSpeak, но когда я звоню AudioUnitInitialize
в симуляторе iOS, я постоянно получаю запрос macOS разрешить доступ к микрофону, даже если я хочу только воспроизведение.
На реальном устройстве все работает нормально без каких-либо встроенных подсказок, но это действительно раздражает при запуске приложения в симуляторе, потому что эти подсказки появляются каждый раз, когда я запускаю приложение.
- (void)setupRemoteIO
{
AudioUnit audioUnit;
// Describe audio component
AudioComponentDescription desc;
desc.componentType = kAudioUnitType_Output;
desc.componentSubType = kAudioUnitSubType_RemoteIO;
desc.componentFlags = 0;
desc.componentFlagsMask = 0;
desc.componentManufacturer = kAudioUnitManufacturer_Apple;
// Get component
AudioComponent inputComponent = AudioComponentFindNext(NULL, amp;desc);
// Get audio unit
OSStatus status = AudioComponentInstanceNew(inputComponent, amp;audioUnit);
if (status != noErr)
{
printf("AudioIO could not create new audio component: status = %in", status);
}
UInt32 enableIO;
AudioUnitElement inputBus = 1;
AudioUnitElement outputBus = 0;
//Disabling IO for recording
enableIO = 0;
AudioUnitSetProperty(audioUnit, kAudioOutputUnitProperty_EnableIO, kAudioUnitScope_Input, inputBus, amp;enableIO, sizeof(enableIO));
//Enabling IO for playback
enableIO = 1;
AudioUnitSetProperty(audioUnit, kAudioOutputUnitProperty_EnableIO, kAudioUnitScope_Output, outputBus, amp;enableIO, sizeof(enableIO));
// initialize
status = AudioUnitInitialize(audioUnit);
if (status != noErr)
{
printf("AudioIO could not initialize audio unit: status = %in", status);
}
}
Ответ №1:
Это известная ошибка с Xcode (предыдущая версия 10.2) от macOS Mojave (я говорю известная, потому что это случалось со мной много раз при воспроизведении видео, а также потому, что, когда я искал ее, я обнаружил, что у многих людей была такая же проблема); хотя я не смог найти никакого отчета от Apple. Возможно, может быть какой-то обходной путь в зависимости от среды, способа запуска приложения, версии Xcode и версии macOS Mojave, которые у вас есть.
Это произойдет только в симуляторе, и, как вы также сказали, этого не произойдет на реальном устройстве, поскольку большинству приложений не требуется доступ к микрофону для воспроизведения аудио / видео функций.
Тем временем эта ошибка будет устранена, вы можете попробовать:
-
Переход к
"Security amp; Privacy"
настройкам на вашем macOS -
"Microphone"
на левой панели -
Затем на правой панели
disable
опция для Xcode
Еще одна вещь, от которой вы можете попытаться избавиться, — это изменить аппаратный аудиовход на внутренний микрофон:
Обновление в Xcode 10.2:
Теперь вам предлагается разрешить доступ к микрофону только один раз на всех устройствах симулятора. (45715977)
Комментарии:
1. К сожалению, диалоговое окно все еще отображается, даже если я отключу это
2. @Jan Я обновил свой ответ, включив в него больше способов фактически попытаться устранить обходной путь для этой ошибки
3. @Jan в последней версии Xcode Beta 10.2 эта проблема должна была быть решена. В случае, если вы не хотите переходить на бета-версию до выхода стабильной версии, вам придется прибегнуть к обходным путям.
4. спасибо за обновление вашего ответа. Кажется, это работает. Я также попробую с бета-версией
5. @Jan Теперь с Xcode 10.2 «Теперь вам предлагается разрешить доступ к микрофону только один раз на всех устройствах симулятора. (45715977)».