Приложение отклонено из-за отсутствующих описаний использования (Xcode8)

Итак, сегодня я получил эту почту, заявив, что последняя версия моего приложения была отклонена iTunes Connect из-за некоторых отсутствующих описаний использования. Если быть точным:

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

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

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

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

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

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

Как только эти проблемы будут исправлены, вы можете повторно добавить исправленный двоичный файл.

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

Это потому, что одна из моих зависимостей (Cocoapods) может содержать некоторый код для запроса этих разрешений? Или эти описания обязательны, даже если я никогда не прошу увидеть календарь, контакты и т.д.?

Ответ 1

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

Или, в идеале, если вам не нужен доступ, посмотрите, есть ли способ не запрашивать его (или использовать фреймворки, которые делают без необходимости).

Ответ 2

iOS 10 должна добавить разрешение в info.plist, просто просмотрите этот БЛОГ: - settings-in-ios-10, вы получите все идеи.

Добавьте разрешение в базу данных info.plist в вашем журнале ошибок.

Примечание. Укажите правильную причину разрешения в строковом значении, в противном случае Apple снова отклонит приложение.

NSCameraUsageDescription

<key>NSCameraUsageDescription</key>
    <string>$(PRODUCT_NAME) camera use.</string>

NSContactsUsageDescription

<key>NSContactsUsageDescription</key>
    <string>$(PRODUCT_NAME) contacts use.</string>

NSPhotoLibraryUsageDescription

<key>NSPhotoLibraryUsageDescription</key>
    <string>$(PRODUCT_NAME) photos and video use.</string>

NSBluetoothPeripheralUsageDescription

<key>NSBluetoothPeripheralUsageDescription</key>
    <string>$(PRODUCT_NAME) bluetooth use.</string>

NSMicrophoneUsageDescription

<key>NSMicrophoneUsageDescription</key>
    <string>$(PRODUCT_NAME) microphone use.</string>

NSMotionUsageDescription

<key>NSMotionUsageDescription</key>
    <string>$(PRODUCT_NAME) motion use.</string>

NSLocationAlwaysUsageDescription

<key>NSLocationAlwaysUsageDescription</key>
    <string>$(PRODUCT_NAME) location use.</string>

NSLocationUsageDescription

<key>NSLocationUsageDescription</key>
    <string>$(PRODUCT_NAME) location use.</string>

NSLocationWhenInUseUsageDescription

<key>NSLocationWhenInUseUsageDescription</key>
    <string>$(PRODUCT_NAME) location use.</string>

NSRemindersUsageDescription

<key>NSRemindersUsageDescription</key>
    <string>$(PRODUCT_NAME) reminders use.</string>

NSSiriUsageDescription

<key>NSSiriUsageDescription</key>
    <string>$(PRODUCT_NAME) siri use.</string>

NSVideoSubscriberAccountUsageDescription

<key>NSVideoSubscriberAccountUsageDescription</key>
    <string>$(PRODUCT_NAME) video use.</string>

NSSpeechRecognitionUsageDescription

<key>NSSpeechRecognitionUsageDescription</key>
    <string>$(PRODUCT_NAME) speech recognition use.</string>

NSCalendarsUsageDescription

<key>NSCalendarsUsageDescription</key>
    <string>$(PRODUCT_NAME) user your calendar.</string>

enter image description here

Ответ 3

Вы можете добавить в свой info.plist, например:

<key>NSCalendarsUsageDescription</key>
    <string>Explain the reasons for accessing...</string>
    <key>NSPhotoLibraryUsageDescription</key>
    <string>Explain the reasons for accessing...</string>
    <key>NSBluetoothPeripheralUsageDescription</key>
    <string>Explain the reasons for accessing...</string>

и др.

Надежда поможет кому-то...

Ответ 4

У меня была такая же проблема, и оказалось, что если какая-либо инфраструктура, на которую вы ссылаетесь, имеет код, который запрашивает это разрешение (даже если ваше приложение никогда не запрашивает их), описания использования необходимы. Но, согласно моему тесту, если вы не запрашиваете их, они не будут отображаться в списке разрешений вашего приложения.

Ответ 5

Календарь: Ключ: Конфиденциальность - Использование календарей Описание
Ценность: события календаря $(PRODUCT_NAME)

Напоминание: Ключ: Конфиденциальность - Напоминания Использование Описание
Значение: $(PRODUCT_NAME) напоминание использовать

Контакт: Ключ: Конфиденциальность - Контакты Описание использования
Значение: $(PRODUCT_NAME) использует контакт

Фото: Ключ: Конфиденциальность - Использование библиотеки фотографий Описание
Значение: $(PRODUCT_NAME) использование фотографий

Совместное использование Bluetooth: Ключ: Конфиденциальность - Использование периферийного устройства Bluetooth Описание
Значение: $(PRODUCT_NAME) Bluetooth Периферийное использование

Микрофон: Ключ: Конфиденциальность - Использование микрофона Описание
Значение: $(PRODUCT_NAME) использует микрофон

Камера: Ключ: Конфиденциальность - Использование камеры Описание
Ценность: использование функции $(PRODUCT_NAME)

Местоположение: Ключ: Конфиденциальность - Местоположение Всегда Описание использования
Значение: использование позиции $(PRODUCT_NAME)

Ключ: Конфиденциальность - Местоположение при использовании Использование Описание
Значение: использование позиции $(PRODUCT_NAME)

Хит: Ключ: Конфиденциальность - Описание использования в отношении здоровья Значение: $(PRODUCT_NAME) использование общих ресурсов

Ключ: конфиденциальность - Обновление работоспособности Описание использования
Значение: $(PRODUCT_NAME) использование обновления heath

HomeKit: Ключ: Privacy - HomeKit Описание использования
Значение: $(PRODUCT_NAME) для домашнего использования.

Библиотека мультимедиа: Ключ: конфиденциальность - описание медиа-библиотеки

Значение: медиакарта $(PRODUCT_NAME) использует

Движение: Ключ: Конфиденциальность - Использование движения Описание
Значение: $(PRODUCT_NAME) использование движения

Распознавание речи: Ключ: Конфиденциальность - Распознавание речи Описание использования
Значение: $(PRODUCT_NAME) использование речи

SiriKit: Ключ: Конфиденциальность - Описание использования Siri
Значение: $(PRODUCT_NAME) siri use

Провайдер ТВ: Ключ: Конфиденциальность - Использование Провайдера Провайдера Описание
Значение: $(PRODUCT_NAME) Использование tvProvider

Ответ 6

Для тех, кто интересуется, почему в вашем приложении появились все эти настройки разрешений, в первую очередь это может быть связано с CocoaPods или Carthage - они подключили все эти разрешения. Я только что обновил свое приложение, чтобы использовать cordova-plugin-firebasex, который имеет обширную установку Cocoapods (и зависимостей). Вы можете отключить эти разрешения ДО того, как вы установите cocoapods в свой проект, поместив PermissionsConfiguration.xcconfig в корень вашего проекта - вы можете узнать больше об этом здесь: https://cocoapods.org/pods/Permission#installation

Все это удивило меня, когда новая версия моего приложения была отклонена из-за отсутствия 7 ключа доступа/строки в файле Info.plist. Затем мне пришлось покопаться в своем проекте, чтобы найти причину этого, так как моему приложению не нужны эти разрешения (или их нет).

Он может существовать, но в настоящее время я не могу найти способ удалить разрешения после интеграции модулей... мне придется покопаться в том, как это сделать, не запуская мой проект заново.