Ответ 1
Просто добавьте ключ NSMicrophoneUsageDescription
и добавьте значение, объясняющее, почему ваше приложение использует микрофон. Это последнее требование в iOS 10.
Получил отказ от сборки
Приложение Info.plist
должно содержать ключ NSMicrophoneUsageDescription
со строковым значением, объясняющим пользователю, как приложение использует эти данные.
Приложение не использует микрофон. Или я думаю.
Как отслеживать, где используется mike?
UPD23112016: учитывая, что ленивый ответ поддерживается, я подал новый запрос функции с яблоком, чтобы закрыть это отверстие безопасности.
UPD05042017: он по-прежнему беспокоит, что, как только вы прокси-сервер в какой-то сторонней структуре через какой-то наполовину испеченный NSMicrophoneUsageDescription у вас есть нулевой контроль над тем, где и когда он может использоваться, если пользователь соглашается для доступа к микрофону. Люди, пожалуйста, выполняйте тщательную проверку и NSMicrophoneUsageDescription, которая отражает тот факт, что микрофон используется кодом, который полностью вне вашего контроля, когда использование скрывается сторонней двоичной структурой. Спасибо.
Просто добавьте ключ NSMicrophoneUsageDescription
и добавьте значение, объясняющее, почему ваше приложение использует микрофон. Это последнее требование в iOS 10.
Для ленивых:
если вы хотите быстро добавить описания использования для большинства медиа-доступа (фотографии на устройстве, камеру, видеозапись, местоположение):
щелкните правой кнопкой мыши файл info.plist и → откройте как → Исходный код
затем вставьте следующее между текущими значениями:
<key>NSMicrophoneUsageDescription</key>
<string>Need microphone access for uploading videos</string>
<key>NSCameraUsageDescription</key>
<string>Need camera access for uploading Images</string>
<key>NSLocationUsageDescription</key>
<string>Need location access for updating nearby friends</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>This app will use your location to show cool stuffs near you.</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>Need Library access for uploading Images</string>
Эти описания, конечно, зависят от вас. Я попытался сделать их как можно более универсальными.
Надеюсь, это сэкономит время!
И виновником было (барабаны): инфраструктура Instabug.
Они говорят вам прямо на своих страницах, что позволяют
пользователи берут звуковые заметки во время составления обратной связи.
Поэтому я добавил NSMicrophoneUsageDescription
в приложение
объясняя это.
Обратите внимание, что существует много API-интерфейса Apple, в котором instabug использует
Undefined символы для архитектуры arm64: (я удалил некоторые из них, которые кажутся законными в соответствии с тем, что утверждает эта структура, и оставили то, на что я не вижу претензий в marketware)
"_ AVMakeRectWithAspectRatioInsideRect", на который ссылаются: + [IBGIAMImageAttachmentView sizeForContent: forWidth:] в InstabugHost_lto.o
"_ OBJC_CLASS _ $_ CTTelephonyNetworkInfo", на который ссылаются: objc-class-ref в InstabugHost_lto.o
"_ AVNumberOfChannelsKey", на который ссылаются: - [Начальная запись IBGVoiceNoteManager] в InstabugHost_lto.o
"_ CTRadioAccessTechnologyHSDPA", на который ссылаются: + [IBGInspector getCarrier] в InstabugHost_lto.o
"_ CTRadioAccessTechnologyGPRS", на который ссылаются: + [IBGInspector getCarrier] в InstabugHost_lto.o
"_ CTRadioAccessTechnologyWCDMA", на который ссылаются: + [IBGInspector getCarrier] в InstabugHost_lto.o
"_ CTRadioAccessTechnologyEdge", на который ссылаются: + [IBGInspector getCarrier] в InstabugHost_lto.o
"_ CTRadioAccessTechnologyCDMA1x", на который ссылаются: + [IBGInspector getCarrier] в InstabugHost_lto.o
"_ CTRadioAccessTechnologyCDMAEVDORevA", на который ссылаются: + [IBGInspector getCarrier] в InstabugHost_lto.o
"_ CTRadioAccessTechnologyCDMAEVDORevB", на который ссылаются: + [IBGInspector getCarrier] в InstabugHost_lto.o
"_ CTRadioAccessTechnologyLTE", на который ссылаются: + [IBGInspector getCarrier] в InstabugHost_lto.o
"_ OBJC_CLASS _ $_ AVURLAsset", на который ссылаются: _OBJC_CLASS _ $_ IBGAsset в InstabugHost_lto.o
"_ OBJC_METACLASS _ $_ AVURLAsset", на который ссылаются: _OBJC_METACLASS _ $_ IBGAsset в InstabugHost_lto.o
"_ CTRadioAccessTechnologyCDMAEVDORev0", на который ссылаются: + [IBGInspector getCarrier] в InstabugHost_lto.o
"_ CTRadioAccessTechnologyHSUPA", на который ссылаются: + [IBGInspector getCarrier] в InstabugHost_lto.o
ld: символ (ы), не найденный для архитектуры arm64
Итак, в этом пост-снежном мире мне нужно задаться вопросом, зачем ему нужна коретелефония, например.
Так что я получаю, так это то, что если у вас нет источника, вы должны раскрыть пользователю, что ваше приложение сам НЕ использует микрофон или камеру, чтобы пользователь имеет возможность запретить доступ к этому устройству.
Ты не хочешь быть в новостях когда-нибудь из-за какого-то недостатка в безопасности эксплуатируется через ваше приложение.
Неразрешенный: описание использования микрофона с тщательно продуманным дизайном не позволяет полностью решить проблему с безопасностью, хотя в случае, если ваше приложение использует микрофон и стороннюю структуру (думаю, что это так) тоже нуждается в этом.
Здесь, где раскрытие кредитов может пригодиться, давая пользователям представление о том, какой сторонний код вы полагаетесь. Дайте кредит, где он должен: ^)
Если вы ленитесь, например, я и никогда не читайте статью о безопасности ios здесь короткий https://developer.apple.com/videos/play/wwdc2016/705/
Если вы на самом деле ленивы в 19:00, оратор говорит вам что вы не должны лениться об этих описаниях.
Instabug использует NSMicrophoneUsageDescription
, чтобы позволить вашим пользователям записывать голосовую заметку об ошибке или обратной связи с вами.
Приложения iOS требуют от пользователя предоставления разрешения перед доступом к микрофону. Попытка доступа к нему без разрешения пользователя приведет к сбою приложения.
Чтобы запросить разрешение пользователя, нам просто нужно добавить NSMicrophoneUsageDescription в файл info.plist и указать значение для этого ключа. Значение может представлять собой любую строку, в которой приложения должны получить доступ к микрофону.
Просто наличие AVAudioSession.sharedInstance().requestRecordPermission()
где-то в вашей базе кода достаточно, чтобы вызвать эту ошибку с помощью iTunes Connect. Это даже не нужно активно вызывать этот код!
Причина заключается в отсутствии фреймворков в Linked FrameWorks и библиотеках, таких как avkit и avfoundation