iOS 10 - Изменения в запросе разрешений камеры, микрофона и библиотеки фотографий, вызывающие сбой приложения.

104

iOS 10 теперь требует разрешения пользователя на доступ к медиа-библиотеке, фотографиям, камере и другому подобному оборудованию. Решение для этого - добавить их ключи info.plistс описанием для пользователя того, как мы используем их данные,

Я смог найти только несколько ключей

NSPhotoLibraryUsageDescription
NSMicrophoneUsageDescription
NSCameraUsageDescription

Я хочу знать, есть ли еще ключи и для другого оборудования, например, iOS 10 если вы не предоставили info.plistправильное описание ключей, ваше приложение выйдет из строя при сборке с использованием XCode - 8 beta.

Сайед Али Салман
источник
разве iOS 10 не находится под NDA?
sage444
Я не уверен в этом.
Сайед Али Салман

Ответы:

138

[ОБНОВЛЕННЫЙ список ключей конфиденциальности до iOS 13 - см. Ниже]

Есть список всего, Cocoa Keysчто вы можете указать в своем Info.plistфайле:

https://developer.apple.com/library/content/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html

(Xcode: Target -> Информация -> Пользовательские целевые свойства iOS)

iOS уже требовала разрешения для доступа к микрофону, камере и медиа-библиотеке ранее (iOS 6, iOS 7), но, поскольку приложение iOS 10 выйдет из строя, если вы не предоставите описание, почему вы запрашиваете разрешение (это не может быть пусто).

Ключи конфиденциальности с примером описания: шпаргалка

Источник

В качестве альтернативы вы можете открыть Info.plistкак исходный код: исходный код

Источник

И добавьте ключи конфиденциальности, например:

<key>NSLocationAlwaysUsageDescription</key>
<string>${PRODUCT_NAME} always location use</string>

Список всех ключей конфиденциальности: [ОБНОВЛЕНО до iOS 13]

NFCReaderUsageDescription
NSAppleMusicUsageDescription
NSBluetoothAlwaysUsageDescription
NSBluetoothPeripheralUsageDescription
NSCalendarsUsageDescription
NSCameraUsageDescription
NSContactsUsageDescription
NSFaceIDUsageDescription
NSHealthShareUsageDescription
NSHealthUpdateUsageDescription
NSHomeKitUsageDescription
NSLocationAlwaysUsageDescription
NSLocationUsageDescription
NSLocationWhenInUseUsageDescription
NSMicrophoneUsageDescription
NSMotionUsageDescription
NSPhotoLibraryAddUsageDescription
NSPhotoLibraryUsageDescription
NSRemindersUsageDescription
NSSiriUsageDescription
NSSpeechRecognitionUsageDescription
NSVideoSubscriberAccountUsageDescription

Обновление 2019:

За последние месяцы два моих приложения были отклонены во время обзора, потому что в описании использования камеры не было указано, что я делаю со сделанными фотографиями.

Мне пришлось изменить описание с ${PRODUCT_NAME} need access to the camera to take a photoна, ${PRODUCT_NAME} need access to the camera to update your avatarхотя контекст приложения был очевиден (пользователь нажал на аватар).

Кажется, что Apple теперь уделяет еще больше внимания описанию использования конфиденциальности, и мы должны подробно объяснить, почему мы запрашиваем разрешение.

Климчак М.
источник
2
да, но изменение заключается в том, что приложение теперь вылетает, если вы не предоставили описание того, почему мы запрашиваем разрешение. пожалуйста, поправьте меня, если я ошибаюсь.
Сайед Али Салман
1
@Syed Ali Salman. Вы правы - он вылетает с iOS10, теперь действительно ваш вопрос. Обновлю ответ. :)
KlimczakM
1
Надеюсь, яблоко решит, обязательно это или нет. Согласно документации Apple, это не так:Explain why your app needs the information if it’s not obvious. You can add custom text to the system-provided permission request alert. Make the text specific and polite, so people don’t feel pressured. Keep the text short, and use sentence case. There’s no need to include your app name. The system already identifies your app as the one making the request.
sumofighter666 01
Я ранее говорил о возможности оставить эти значения пустыми, чтобы просто отображать сгенерированное системой сообщение, и хотя функционально он работает нормально, похоже, что Apple автоматически отклонит ваш двоичный файл, если вы включите эти ключи, но не установите для них значение .
Stonz2
13
Мне кажется, что со стороны Apple - полная чушь , позволять приложению просто аварийно завершать работу, когда в нем отсутствует описание разрешений ... Какой плохой пользовательский опыт! (Аноним) жалуется, что поток в обзоре AppStore быстро течет ... И, конечно, Simultor ведет себя по-другому ...
Габриэль
65

Ниже приведены коды для образца разрешения на запрос iOS 10 для info.plist.
Вы можете изменить свое собственное сообщение.

    <key>NSCameraUsageDescription</key>
    <string>${PRODUCT_NAME} Camera Usage</string>

    <key>NSBluetoothPeripheralUsageDescription</key>
    <string>${PRODUCT_NAME} BluetoothPeripheral</string>

    <key>NSCalendarsUsageDescription</key>
    <string>${PRODUCT_NAME} Calendar Usage</string>

    <key>NSContactsUsageDescription</key>
    <string>${PRODUCT_NAME} Contact fetch</string>

    <key>NSHealthShareUsageDescription</key>
    <string>${PRODUCT_NAME} Health Description</string>

    <key>NSHealthUpdateUsageDescription</key>
    <string>${PRODUCT_NAME} Health Updates</string>

    <key>NSHomeKitUsageDescription</key>
    <string>${PRODUCT_NAME} HomeKit Usage</string>

    <key>NSLocationAlwaysUsageDescription</key>
    <string>${PRODUCT_NAME} Use location always</string>

    <key>NSLocationUsageDescription</key>
    <string>${PRODUCT_NAME} Location Updates</string>

    <key>NSLocationWhenInUseUsageDescription</key>
    <string>${PRODUCT_NAME} WhenInUse Location</string>

    <key>NSAppleMusicUsageDescription</key>
    <string>${PRODUCT_NAME} Music Usage</string>

    <key>NSMicrophoneUsageDescription</key>
    <string>${PRODUCT_NAME} Microphone Usage</string>

    <key>NSMotionUsageDescription</key>
    <string>${PRODUCT_NAME} Motion Usage</string>

    <key>kTCCServiceMediaLibrary</key>
    <string>${PRODUCT_NAME} MediaLibrary Usage</string>

    <key>NSPhotoLibraryUsageDescription</key>
    <string>${PRODUCT_NAME} PhotoLibrary Usage</string>

    <key>NSRemindersUsageDescription</key>
    <string>${PRODUCT_NAME} Reminder Usage</string>

    <key>NSSiriUsageDescription</key>
    <string>${PRODUCT_NAME} Siri Usage</string>

    <key>NSSpeechRecognitionUsageDescription</key>
    <string>${PRODUCT_NAME} Speech Recognition Usage</string>

    <key>NSVideoSubscriberAccountUsageDescription</key>
    <string>${PRODUCT_NAME} Video Subscribe Usage</string>

iOS 11 и более поздних версий, если вы хотите добавить фото / изображение в свою библиотеку, вы должны добавить этот ключ

    <key>NSPhotoLibraryAddUsageDescription</key>
    <string>${PRODUCT_NAME} library Usage</string>
Илеш П
источник
Спасибо, это верный ответ, просто Apple говорит: «Нет необходимости указывать имя вашего приложения. Система уже определяет ваше приложение как приложение, отправившее запрос».
Yucel Bayram
2
Вот ответ, который я искал
Динеш Пхалвадия
19

Вы должны добавить это разрешение в Info.plist для iOS 10.

Фото :

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

Микрофон:

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

Камера:

Key       :  Privacy - Camera Usage Description   
Value   :  $(PRODUCT_NAME) camera use
Кирит Моди
источник
Правые клавиши нравятся NSPhotoLibraryUsageDescription.
BangOperator