NSCameraUsageDescription в iOS 10.0 сбой во время выполнения?

154

Используя iOS 10.0последнюю бета-версию. Я пытался использовать камеру для сканирования штрих-кода в моем приложении, и он вылетел из-за этой ошибки во время выполнения.

Это приложение упало, потому что оно пыталось получить доступ к конфиденциальным данным без описания использования. Info.plist приложения должен содержать ключ NSCameraUsageDescription со строковым значением, объясняющим пользователю, как приложение использует эти данные.

Поместите этот ключ в список, но он все еще разбился?

user3069232
источник
6
У меня та же проблема, я добавил NSCameraUsageDescription в info.plist, но все равно вылетает с тем же сообщением. Вам удалось решить это? Очевидно, никто, кто ответил на эту проблему, не понимал, что она падает, даже если вы уже добавили ключ.
CarmenA
Если вы добавили запись в правильный файл info.plist, но это все равно не удалось, это может быть связано с тем, что Xcode иногда не замечает изменений в файлах ресурсов, таких как info.plist, изображения, аудио, фильмы и т. Д. Возможно, вам потребуется выполнить очистите или удалите продукт сборки приложения из папки «Производные данные», чтобы заставить XCode использовать последнюю версию.
Уолт Селлерс

Ответы:

227

После iOS 10 вы должны определить и предоставить описание использования всех конфиденциальных данных системы, к которым обращается ваше приложение, в Info.plist, как показано ниже:

Календарь

Key    :  Privacy - Calendars Usage Description    
Value  :  $(PRODUCT_NAME) calendar events

Напоминание:

Key    :   Privacy - Reminders Usage Description    
Value  :   $(PRODUCT_NAME) reminder use

Контакт:

Key    :   Privacy - Contacts Usage Description     
Value  :  $(PRODUCT_NAME) contact use

Фото :

Key    :  Privacy - Photo Library Usage Description    
Value  :  $(PRODUCT_NAME) photo use

Обмен Bluetooth:

Key    :  Privacy - Bluetooth Peripheral Usage Description     
Value  :  $(PRODUCT_NAME) Bluetooth Peripheral use

Микрофон:

Key    :  Privacy - Microphone Usage Description    
Value  :  $(PRODUCT_NAME) microphone use

Камера:

Key    :  Privacy - Camera Usage Description   
Value  :  $(PRODUCT_NAME) camera use

Расположение :

Key    :  Privacy - Location Always Usage Description   
Value  :  $(PRODUCT_NAME) location use

Key    :  Privacy - Location When In Use Usage Description   
Value  :  $(PRODUCT_NAME) location use

Хит:

Key    :  Privacy - Health Share Usage Description   
Value  :  $(PRODUCT_NAME) heath share use

Key    :  Privacy - Health Update Usage Description   
Value  :  $(PRODUCT_NAME) heath update use

HomeKit:

Key    :  Privacy - HomeKit Usage Description   
Value  :  $(PRODUCT_NAME) home kit use

Медиа библиотека :

Key    :  Privacy - Media Library Usage Description   
Value  :  $(PRODUCT_NAME) media library use

Движение:

Key    :  Privacy - Motion Usage Description   
Value  :  $(PRODUCT_NAME) motion use

Распознавание речи :

Key    :  Privacy - Speech Recognition Usage Description   
Value  :  $(PRODUCT_NAME) speech use

SiriKit:

Key    :  Privacy - Siri Usage Description  
Value  :  $(PRODUCT_NAME) siri use

ТВ провайдер:

Key    :  Privacy - TV Provider Usage Description   
Value  :  $(PRODUCT_NAME) tvProvider use

Вы можете получить подробную информацию по этой ссылке.

Bhoopi
источник
1
Privacy - Photo Library Usage Descriptionсделал это по ошибкеNSPhotoLibraryUsageDescription
Бруно
Я новичок в Apple Development, и эта проблема раздражала. Рад, что наткнулся на это. Ура!
user2529011
1
@MaylorTaylor: Да, вы должны добавить его.
Бхупи
111

Как Apple изменила, как вы можете получить доступ к любым пользовательским частным типам данных в iOS 10.

Вам необходимо добавить Privacy - Camera usage descriptionключ " " в ваше приложение Info.plistи информацию об их использовании, которая применима к вашему приложению, как в приведенном ниже примере, который я предоставил для сканирования штрих-кодов.

Для получения дополнительной информации, пожалуйста, найдите скриншот ниже.

введите описание изображения здесь

Рамкришна Шарма
источник
62

Вы должны добавить этот ключ ниже в info.plist.

NSCameraUsageDescription Или Privacy - Camera usage description

И добавить описание использования.

Подробные скриншоты доступны по этой ссылке

Блюуингз
источник
Похоже, он уже добавил это, но все еще получает крах. Это та же проблема, что и у меня, даже если этот KVP включен в список, он все равно рушится, как будто его нет.
43

Либо откройте Info.plist в качестве исходного кода и добавьте следующее:

<key>NSCameraUsageDescription</key>
<string>Camera usage description</string>
ayalcinkaya
источник
4
если кто-то хочет локализовать «NSCameraUsageDescription», добавьте "NSCameraUsageDescription" = "Requires access to the camera";в свой локализованный файл infoPlist.strings
Хуррам Шехзад,
30

Используйте эти необработанные значения и скопируйте в info.plist

    <key>NSCalendarsUsageDescription</key>
      <string>$(PRODUCT_NAME) calendar events</string>
    <key>NSRemindersUsageDescription</key>
      <string>$(PRODUCT_NAME) reminder use</string>
    <key>NSCameraUsageDescription</key>
      <string>This app requires to access your photo library to show image on profile and send via chat</string>
    <key>NSMicrophoneUsageDescription</key>
      <string>This app requires to access your microphone to record video with your voice send via chat</string>
    <key>NSPhotoLibraryUsageDescription</key>
      <string>This app requires to access your photo library to show image on profile and send via chat</string>
    <key>NSContactsUsageDescription</key>
       <string>$(PRODUCT_NAME) contact use</string>
    <key>NSLocationAlwaysUsageDescription</key>
      <string>$(PRODUCT_NAME) location use</string>
    <key>NSLocationWhenInUseUsageDescription</key>
      <string>$(PRODUCT_NAME) location use</string>
Zeeshan
источник
от вас есть эти необработанные ключевые имена?
Омар Н
Это круто. Это спасло меня от множества кликов в xCode
MaylorTaylor
26

Пользовательский интерфейс xcode немного изменился с одной версии на другую, поэтому здесь вы обновляете plist для 9.0 beta 4, если это помогает Project -> Target -> Infoвведите описание изображения здесь

user3325025
источник
2
Это должен быть принятый ответ! У меня была та же самая проблема на XCode 9.2, несмотря на то, что я уже добавил <key>NSCameraUsageDescription</key>в info.plist .
psantos
2
Определенно принятый ответ !! У меня есть две цели в моем проекте, и я попытался добавить это <key>NSCameraUsageDescription</key>во второй файл info.plist , но безрезультатно , и я могу подтвердить, что XCode (10.1) определенно не учитывает эти изменения, запустив git status потому что мой info.plist для другой цели не изменился. Таким образом, правильный путь заключается в том, чтобы пройти через Project-> Target-> Info . Спасибо чувак!
бюстгальтер. Сцена
4

Еще один случай, с которым я столкнулся при попытке использовать камеру, заключался в том, что она все еще была занята сбоями, выдавая то же самое _CRASHING_DUE_TO_PRIVACYдаже после добавления «Описание использования камеры». После того, как не удалось получить ничего осязаемого из стека вызовов, переключился на «Органайзер» и просмотрел отчеты о сбоях на устройстве. Я обнаружил, что на самом деле он жаловался на неприкосновенность частной жизни из-за отсутствия «Описание использования микрофона». Я добавил это и избавился от такой загадочной поломки.

Yoku
источник
4

Для тех, кто все еще получает ошибку, даже если вы добавили правильные ключи в Info.plist:

Убедитесь, что вы добавляете ключ в правильный Info.plist. Более новая версия xCode, по-видимому, имеет 3 Info.plist.

Один находится в папке с именем вашего приложения, что решило проблему для меня.

Второй находится под YourappnameTests, а третий находится под YourappnameUITests.

Надеюсь, поможет.

Vetuka
источник
2

Если вы используете Ionic, вы можете решить эту проблему напрямую из config.xml , добавив внутри тега ios платформы:

<platform name="ios">
.
.
.
    <config-file target="*-Info.plist" parent="NSPhotoLibraryUsageDescription">
        <string>photo library usage description</string>
    </config-file>
    <config-file target="*-Info.plist" parent="NSCameraUsageDescription">
        <string>camera usage description</string>
    </config-file>
.
.
.
</platform>

Я бы тоже хотел поблагодарить @BHUPI за ответ.

Виктор Таварес
источник
1

Я проверил plist и обнаружил, что он не работает, только в информации о проекте, вам нужно добавить «Privacy - Camera ....», тогда он должен работать. Надеюсь помочь вам.

Mark90
источник
0

У меня была такая же проблема, и я не мог найти решение. Mark90 прав, есть много файлов info.plist, и вы должны отредактировать правильный. Перейдите в Project, в разделе TARGETS выберите проект (не тесты), на панели вкладок выберите Info и добавьте разрешение в « Custom Target Properties ».

Майкл Маринос Ликурас
источник