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

91

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

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

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

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

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

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

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

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

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

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

КимХафр
источник
3
По моему опыту - они необходимы, только если вы запрашиваете разрешения. Так что, возможно, это делает за вас какая-то зависимость. Также ВСЕ эти разрешения пахнут подозрительно, особенно если ваше приложение представляет собой простой список задач. Может какая-то зависимость идет фишинг?
Эймантас
Не могли бы вы опубликовать свою PodFileи список библиотек, которые вы используете (если вы используете сторонние cocoapods)?
Julien Quere
Это был github.com/nickoneill/PermissionScope .. Спасибо за вашу помощь!
KimHafr
ُ его объяснение и демонстрация использования: iosdevcenters.blogspot.com/2016/09/…
Саид
у меня точно такая же проблема, и я предполагаю, что это вызвано: pod 'ReactNativePermissions',: path => '../node_modules/react-native-permissions'
luky

Ответы:

33

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

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

Мэтью Симэн
источник
11
Я не мог даже представить, что добавлю библиотеку, запрашивающую все эти разрешения. Но когда я его нашел, это было так очевидно: github.com/nickoneill/PermissionScope
KimHafr
1
Да, такая структура может быть не очень хорошей идеей, потому что она заставляет ваше приложение объявлять намного больше разрешений, чем ему нужно.
Мэтью Симан,
3
Я предполагаю, что это скорее функция, чем ошибка .. iTunes Connect обнаруживает, что где-то в вашем приложении кто-то может запросить разрешения. В этом случае вам необходимо заполнить описания использования для всего этого, на случай, если вы действительно можете вызвать часть кода в области разрешений. Фреймворк мне тоже нравится, и я не готов его заменить. Я ввел фальшивый текст, и приложение было одобрено. Я отправил его в AppStore, так что, надеюсь, все будет хорошо :-)
KimHafr
15
Нужен способ определить, какая платформа запрашивает это разрешение?
neobie
5
Neobie - вы узнали, как можно обнаружить фреймворки, запрашивающие разрешения?
Nitesh
140

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

Добавьте разрешение в базу файла info.plist в журнале ошибок .

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

NSCameraUsageDescription

<key>NSCameraUsageDescription</key>
    <string>You have to describe the real usage for a human.</string>

NSContactsUsageDescription

<key>NSContactsUsageDescription</key>
    <string>You have to describe the real usage for a human.</string>

NSPhotoLibraryUsageDescription

<key>NSPhotoLibraryUsageDescription</key>
    <string>You have to describe the real usage for a human.</string>

NSBluetoothPeripheralUsageDescription

<key>NSBluetoothPeripheralUsageDescription</key>
    <string>You have to describe the real usage for a human.</string>

NSМикрофонИспользованиеОписание

<key>NSMicrophoneUsageDescription</key>
    <string>You have to describe the real usage for a human.</string>

NSMotionUsageDescription

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

NSLocationAlwaysUsageDescription

<key>NSLocationAlwaysUsageDescription</key>
    <string>You have to describe the real usage for a human.</string>

NSLocationUsageDescription

<key>NSLocationUsageDescription</key>
    <string>You have to describe the real usage for a human.</string>

NSLocationWhenInUseUsageDescription

<key>NSLocationWhenInUseUsageDescription</key>
    <string>You have to describe the real usage for a human.</string>

NSRemindersUsageDescription

<key>NSRemindersUsageDescription</key>
    <string>You have to describe the real usage for a human.</string>

NSSiriUsageDescription

<key>NSSiriUsageDescription</key>
    <string>You have to describe the real usage for a human.</string>

NSVideoSubscriberAccountUsageDescription

<key>NSVideoSubscriberAccountUsageDescription</key>
    <string>You have to describe the real usage for a human.</string>

NSSpeechRecognitionUsageDescription

<key>NSSpeechRecognitionUsageDescription</key>
    <string>You have to describe the real usage for a human.</string>

NSCalendarsUsageDescription

<key>NSCalendarsUsageDescription</key>
    <string>You have to describe the real usage for a human.</string>

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

Митул Марсония
источник
Разве это не должно быть "$ {PRODUCT_NAME}" вместо "$ (PRODUCT_NAME)"? "{}" вместо того "()".
обратная косая черта-f
@ backslash-f, проверьте существующий файл plist в новом проекте, и он должен быть $(PRODUCT_NAME). Вы можете увидеть свойство по умолчанию, как Bundle nameв файле plist.
Jayesh Thanki
1
Обратите внимание, что такое общее описание больше не позволит вам получить одобрение в магазине приложений. За похожие описания нас дважды звенели. Вы должны описать реальное использование человека
О'Руни
9

Вы можете добавить в свой 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>

и т.п.

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

mgyky
источник
6

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

Dielson Sales
источник
3

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

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

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

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

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

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

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

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

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

Heath: Key: Privacy - Health Share Описание использования
Значение: $ (PRODUCT_NAME) использование heath share

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

HomeKit: ключ: конфиденциальность - описание использования HomeKit
Значение: использование домашнего комплекта $ (PRODUCT_NAME)

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

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

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

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

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

Тринад-Койя
источник
0

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

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

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

Ролингер
источник