Додаток відхилено через відсутність описів використання (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
З мого досвіду - вони необхідні лише в тому випадку, якщо ви вимагаєте дозволів. Тож, можливо, якась залежність робить це за вас. Крім того, ВСІ ці дозволи пахнуть рибним, особливо якщо ваш додаток є простим списком задач. Можливо, якась залежність трапляє фішинг?
Eimantas

Не могли б ви опублікувати свою PodFileта список бібліотек, якими ви користуєтесь (якщо ви використовуєте деякі зовнішні кокоподи)?
Julien Quere

Це було github.com/nickoneill/PermissionScope .. Дякуємо за допомогу!
KimHafr


у мене точно така ж проблема, і, мабуть, її спричиняє: pod 'ReactNativePermissions',: path => '../node_modules/react-native-permissions'
luky

Відповіді:


33

Описи є обов’язковими для будь-якого вмісту, який ви або будь-які фреймворки, на які ви посилаєтесь, намагаються отримати доступ. Помилки генеруються при спробі отримати доступ до вмісту, якщо опис використання не був наданий, тому, якщо ви отримуєте ці помилки, ваш додаток повинен їх запитувати. Ви повинні з’ясувати, чому це вимагає ваш додаток або його фреймворки, та додати відповідні описи використання до списку info.plist вашого додатка.

Або в ідеалі, якщо вам не потрібен доступ, подивіться, чи є спосіб не вимагати його (або використовувати фреймворки, які роблять це без потреби).


11
Я не міг упродовж життя уявити, що додаю бібліотеку із запитом на всі ці дозволи. Але це було так очевидно, коли я знайшов: github.com/nickoneill/PermissionScope
KimHafr

1
Так, такий фреймворк, можливо, не є чудовою ідеєю, оскільки змушує ваш додаток заявляти більше дозволів, ніж йому потрібно.
Matthew Seaman,

3
Я думаю, це більше функція, ніж помилка .. iTunes Connect виявляє, що десь у вашому додатку хтось може вимагати дозволів. У такому випадку вам доведеться заповнити описи використання для всіх цих випадків, якщо ви дійсно можете викликати частину коду в дозволі. Мені також подобається фреймворк, і я не готовий його замінити. Тож я заповнив кілька підставних текстів, і додаток було схвалено. Я подав його в AppStore, тому, сподіваюся, все буде нормально :-)
KimHafr

15
Потрібен спосіб виявити, яка структура вимагає такого дозволу?
neobie

5
Neobie - ти знайшов, як можна виявити фреймворки, що вимагають дозволів?
Нітеш,

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>

NSMicrophoneUsageDescription

<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>

тощо

Надія комусь допоможе ...


6

У мене була та сама проблема, і, схоже, якщо будь-яка структура, на яку ви посилаєтеся, має код, який запитує цей дозвіл (навіть якщо ваша програма ніколи не вимагає їх), описи використання необхідні. Але згідно з моїм тестом, якщо ви їх не запитаєте, вони не з’являться у списку дозволів вашої програми.


3

Календар: Ключ: Конфіденційність - Календарі Використання Опис
Значення: Події календаря $ (PRODUCT_NAME)

Нагадування: Ключ: Конфіденційність - Нагадування Використання Опис
Значення: Використання нагадування $ (PRODUCT_NAME)

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

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

Спільне використання Bluetooth: Ключ: Конфіденційність - Використання периферійного пристрою Bluetooth
Значення Опис Значення: $ (PRODUCT_NAME) Використання периферійного пристрою Bluetooth

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

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

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

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

Heath: Ключ: Конфіденційність - Health Share Використання Опис
Значення: $ (PRODUCT_NAME) використання спільного використання Heath

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

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

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

Рух: Ключ: Конфіденційність - Опис використання руху Опис
Значення: $ (Використання) руху

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

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

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


0

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

Це мене все здивувало, коли нову версію мого додатка було відхилено з відсутнім ключем / рядком дозволів у файлі Info.plist. Потім мені довелося копатись у своєму проекті, щоб з’ясувати, що це спричинило, оскільки моєму додатку не потрібні або не використовуються жодні з цих дозволів (ніколи не було).

Він може існувати, але на даний момент я не можу знайти спосіб видалити дозволи після інтеграції стручків ... мені доведеться розібратися, як це зробити, не починаючи свій проект заново.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.