Ошибка подключения к магазину приложений: отсутствует строка назначения в файле Info.plist

Я отправил свое приложение на рассмотрение в App Store Connect. Хотя приложение все еще находится на рассмотрении, я получил электронное письмо, в котором сообщается, что мне нужно исправить ошибку. Вот содержание сообщения:

Dear Developer,

We identified one or more issues with a recent delivery for your app XXXXX. Your delivery was successful, but you may wish to correct the following issues in your next delivery:

"Missing Purpose String in Info.plist File. Your app's code references one or more APIs that access sensitive user data. The app's Info.plist file should contain a NSLocationAlwaysUsageDescription key with a user-facing purpose string explaining clearly and completely why your app needs the data. Starting spring 2019, all apps submitted to the App Store that access user data will be required to include a purpose string.If you're using external libraries or SDKs, they may reference APIs that require a purpose string. While your app might not use these APIs, a purpose string is still required. You can contact the developer of the library or SDK and request they release a version of their code that doesn't contain the APIs.

After you’ve corrected the issues, you can use Xcode or Application Loader to upload a new binary to iTunes Connect.

Best regards,

The App Store Team

Мое приложение полностью построено на Expo, и я не знаю, как получить доступ к Info.plist и изменить его.

Есть идеи?

У меня такая же проблема с последней сборкой, поскольку я даже не использую службы геолокации в своем приложении. И у Apple нет официального документа об этом изменении.

huong 24.08.2018 13:40

Такая же проблема здесь, но не изменил Info.plist.

JamieD 24.08.2018 13:45

Та же проблема. Я просто сделал крошечное изменение, сделал новую сборку и получил это. У меня есть пустой NSLocationWhenInUseUsageDescription в Info.plist, но для него есть строки перевода.

fphilipe 24.08.2018 17:13

+1 Сделал релиз для того же приложения 2 дня назад и все нормально. 2 дня спустя я просто изменил пару строк кода, чтобы выпустить новую версию (не добавлял больше подов или что-то в этом роде), и я получил это сообщение

Tiago Ornelas 24.08.2018 18:00

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

AMB 24.08.2018 18:48

Я столкнулся с той же самой проблемой только сейчас, хотя нашему приложению на самом деле не нужны службы определения местоположения Always. Ему просто нужно NSLocationWhenInUseUsageDescription, для которого у нас уже есть целевая строка. Наверное, это просто глюк со стороны Apple?

ilight 27.08.2018 10:06

И в Apple-моде ссылка, которую они предоставляют в электронном письме, чтобы исправить это, не работает.

gwalshington 27.08.2018 20:55

Нужно ли переархивировать после обновления info.plist?

Bishoy Hanna 12.04.2019 18:37

У меня такая же проблема. Я установил плагин ionic diagnostic и получил этот NSBluetoothAlwaysUsageDescription в Info.plist

Ragesh Pikalmunde 17.10.2019 08:55
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
170
9
92 372
19
Перейти к ответу Данный вопрос помечен как решенный

Ответы 19

Мы получили такое же электронное письмо, и мы вообще не используем CoreLocation. После быстрого поиска мы обнаружили, что Parse SDK может использовать CoreLocation. В электронном письме Apple четко сказано:

If you're using external libraries or SDKs, they may reference APIs that require a purpose string.

Это означает, что в тот момент, когда ваш код или любая другая библиотека или SDK может использовать CoreLocation, даже если вы его не используете, вам необходимо предоставить описание конфиденциальности для «Когда используется» и «Всегда использовать».

Это также что-то новое от Apple, и пока это только предупреждение, но оно потребуется начиная с весны 2019 года для новых заявок.

Это просто глупо .... Если я его не использую, это может заставить людей не скачивать мое приложение только из-за этого. -_-

Mayoul 03.09.2018 14:18

Не совсем. Предупреждение с просьбой использовать вашу локализацию не будет отображаться, если где-то в коде не будет вызван CLLocationManager.requestWhenInUseAuthorization(). Apple проанализировала код каждого приложения, чтобы узнать, можно ли вызвать такую ​​функцию. Если он никогда не вызывается, предупреждение не появляется.

sebleclerc 04.09.2018 16:39

Эта проблема возникает из-за того, что вы не включили

 <NSLocationAlwaysUsageDescription>

для вашего приложения. Я столкнулся с той же проблемой, когда пытался отправить свое приложение в AppStore. После обработки приложения мне пришло такое же письмо. Я просто добавил описание, и теперь оно решено.

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

Это мне помогло. Если вы используете Location в своем приложении (или, может быть, просто всегда), вам нужно добавить эту строку и строку под ней. <key>NSLocationAlwaysUsageDescription</key> <string>Always And In Use Permission</string>

MaylorTaylor 18.10.2019 00:27

У меня есть несколько приложений в магазине, и я попытался распространить версию для QA, и то же самое произошло в двух разных приложениях. Я думаю, что это новый критерий для приема загрузок сборок в Appstore connect.

Решение простое, добавьте следующие строки в файл .plist.

<key>NSLocationAlwaysUsageDescription</key>

<string>custom message</string>

<key>NSLocationWhenInUseUsageDescription</key>

<string>custom message</string>

PS: В моем случае я не использовал какую-либо функцию определения местоположения, но я добавил эти строки, чтобы соответствовать рекомендациям по подключению Appstore. Кстати, после получения этого письма я мог протестировать приложение, даже когда они сказали, что в его сборке есть некоторые проблемы.

Я надеюсь, что это сработает для вас, ребята.

Вау, я только что понял, понял, что все тоже это понимают!

Cameron A. Ellis 26.08.2018 07:31

первый ключ теперь изменился на <key>NSLocationUsageDescription</key>

Hudi Ilfeld 28.03.2019 09:01

Нужно ли переархивировать после обновления info.plist?

Bishoy Hanna 12.04.2019 18:37

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

Dror Bar 16.07.2019 11:39

ИЗМЕНИТЬ апрель 2019 г.: Теперь вам нужно добавить эти два ключа, поскольку началась весна 2019 года. Обратите внимание, что NSLocationAlwaysUsageDescription теперь устарел (начиная с iOS 11) и был заменен на NSLocationAlwaysAndWhenInUseUsageDescription и NSLocationWhenInUseUsageDescription. Если вы хотите поддерживать iOS ниже 11, вам нужно будет использовать три значения.

Подводя итог, вам необходимо:

  • Добавить NSLocationAlwaysAndWhenInUseUsageDescription И NSLocationWhenInUseUsageDescription для iOS 11 и других версий
  • И добавьте NSLocationAlwaysUsageDescription, если хотите поддерживать iOS 10 и ниже
  • И, наконец, вы можете добавить NSLocationUsageDescription, если хотите поддерживать iOS 8 и ниже.


Вы можете отправить свое приложение, даже если получили это сообщение!

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

Я могу подтвердить, что мое приложение было одобрено даже без ключа NSLocationAlwaysUsageDescription и NSLocationWhenInUseUsageDescription в info.plist

В самом деле, как Apple заявила в письме:

Starting spring 2019, all apps submitted to the App Store that access user data will be required to include a purpose string.

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

Просто добавьте две новые записи в ваш info.plist, с NSLocationAlwaysUsageDescription и NSLocationWhenInUseUsageDescription в качестве ключей и краткое описание того, почему вы используете их в качестве значения (даже если вы на самом деле их не используете ...).

Вы уверены, что в редакции за апрель 2019 года не отменено устаревание? Из того, что я вижу, NSLocationUsageDescription является устаревшим. Смотрим здесь: developer.apple.com/library/archive/documentation/General/…

apricity 17.05.2019 17:40

В электронном письме, которое я получил от Apple, упоминается NSLocationAlwaysUsageDescription, поэтому я думаю, что он отменил это.

Dror Bar 16.07.2019 11:41

@apricity @DrorBar Извините, ребята, я действительно ошибся. Это не было отменено, но ошибка все еще была, NSLocationAlwaysUsageDescription следует заменить на NSLocationAlwaysAndWhenInUseUsageDescription и NSLocationWhenInUseUsageDescription , а не на NSLocationUsageDescription (как я ранее писал, извините…). Я обновил свой ответ, чтобы подвести итог процесса.

AnthoPak 16.07.2019 17:25

## Используйте этот ключ в файле info.plist

NSLocationAlwaysUsageDescription Ваше местоположение необходимо для получения преимуществ xyz для вас NSLocationWhenInUseUsageDescription Ваше местоположение необходимо для получения преимуществ xyz

Все эти ответы рассказывают вам, как соблюдать правила App Store, чтобы избежать предупреждения, но истинное исправление будет для Expo, чтобы вы могли отключить их требования SDK для служб определения местоположения, если вы на самом деле их не используете - я не уверен, что это возможно.

Ответ принят как подходящий

Если вы используете Expo, вы можете добавить решение, добавив infoPlist в app.json следующим образом:

  "expo": {
     "ios": {
       "bundleIdentifier": "com.app.myapp",
       "infoPlist": {
         "NSLocationAlwaysUsageDescription": "Some message to appease Apple.",
       },
     },
   }

Expo Docs

На самом деле это НЕТ «какое-то сообщение, чтобы успокоить Apple», но чтобы дать пользователю знать, ЧТО вы делаете в данном случае с сгенерированными пользователем данными (местоположением). Это вопрос конфиденциальности, и я считаю, что быть справедливым по отношению к пользователям ваших приложений - это хорошо.

Lookaji 18.09.2018 12:23

Попался! Я думал о новичках, у которых может возникнуть соблазн оставить все как есть! Я не хотел показаться сварливым :) Ура!

Lookaji 18.09.2018 23:58

@gwalshington У меня нет объекта expo в app.json

Heemanshu Bhalla 18.04.2019 10:14

@HeemanshuBhalla хм, я не знаю почему. В моем app.json он находится наверху и является первым объявленным объектом. Здесь вы объявляете номер версии, идентификатор пакета и т. д. Если вы удалили приложение, может быть, оно выглядит немного иначе?

gwalshington 18.04.2019 19:34

Какой текст набирать, если мы не собираем данные о местоположении? Нам нужно сочинить ложь: S

c0dehunter 29.04.2019 13:42

@ PrimožKralj Да, к сожалению, я не собираю данные о местоположении, но это заставило меня отправить сообщение.

gwalshington 10.05.2019 22:46

Возможны следующие случаи:

NSLocationAlwaysAndWhenInUseUsageDescription (iOS>11)
NSLocationWhenInUseUsageDescription          (iOS>11)
NSLocationAlwaysUsageDescription             (iOS<=10)
NSLocationUsageDescription                   (seems very old, iOS8?)

Apple заявляет по адресу:

Add the NSLocationWhenInUseUsageDescription key and the NSLocationAlwaysAndWhenInUseUsageDescription key to your Info.plist file.

и:

If your app supports iOS 10 and earlier, add the NSLocationAlwaysUsage

NSLocationUsageDescription кажется мертвым, единственная ссылка на сайте ADC: https://developer.apple.com/ibeacon/Getting-Started-with-iBeacon.pdf

Поэтому для уверенности используйте первые 3.

Мое приложение также получило это ,, и я ничего не делаю с этим, но оно может работать хорошо, в следующий раз, когда я думаю, что нужно добавить такой ключ в plist, просто сделайте некоторое описание

Это новое требование от Apple, даже если вы не используете местоположение. Если вы хотите добавить разрешения в Xcode, найдите «Конфиденциальность - Описание использования местоположения» и «Конфиденциальность - Описание использования местоположения при использовании» и введите настраиваемую строку для каждого из них.

В другом обновлении приложения Apple также запрашивала это разрешение: «Конфиденциальность - Описание использования местоположения всегда»

Juan José Ramírez 01.09.2018 00:34

Итак, если я не использую эти функции, что я должен там написать, ложь, что-то вроде «собрать место для будущего использования, может быть»?

Ruslan Shashkov 24.04.2019 20:02

да, Apple свяжется с вами, если у них возникнут вопросы

Juan José Ramírez 10.07.2019 16:37

Я не могу найти Информация о недвижимости в моем xcode 10.1, вы должны были упомянуть, где его найти, я искал настройки сборки как для целей, так и для проекта

Awais Nasir 07.09.2019 08:41

Итак, Targets-> Info-> Custom ios Target Properties было точное местоположение

Awais Nasir 07.09.2019 08:59

Для большего упрощения вы можете добавить эти строки в свой info.plist. Эти ошибки возникают из-за того, что Начиная с весны 2019 года, все приложения, представленные в App Store, которые имеют доступ к пользовательским данным, должны будут включать целевую строку.

  1. Откройте info.plist как исходный код.
  2. Добавьте следующие строки в свой список

    <key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
    <string>$(PRODUCT_NAME) needs Location access for "some reason"!</string>
    <key>NSLocationWhenInUseUsageDescription</key>
    <string>$(PRODUCT_NAME) needs Location access for "some reason"!</string>
    <key>NSLocationAlwaysUsageDescription</key>
    <string>$(PRODUCT_NAME) needs Location access for "some reason"!</string>
    

Мне пришлось удалить лишние пробелы в тегах <key>, и тогда это сработало.

innich 28.03.2019 10:04

@innich спасибо, что указали на это, я изменил свой ответ.

Sachin Nautiyal 28.03.2019 10:44

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

Это действительно очень глупо.

Больше комментария на самом деле ...?

Steve 11.02.2019 03:14

я имел <key>NSLocationWhenInUseUsageDescription </key> вместо <key>NSLocationWhenInUseUsageDescription</key>

обязательно удалите завершающие пробелы

Я также сталкиваюсь с той же проблемой, но через 27 часов я получил электронное письмо об утверждении, даже если я ничего не сделал. Так что подождите примерно 24 часа, а не проделывать весь этот процесс снова.

Да, это ошибка!

Danh Huynh 08.10.2019 02:37

Просмотрите электронное письмо, полученное от ** App Store Connect **

Определите утерянный ключ

инструкции

  1. Откройте файл info.plist.

  2. Добавьте и найдите недостающий ключ из предоставленных опций (например, Контакты = Privacy - Contacts Usage Description)

  3. Добавить описание использования:

$(PRODUCT_NAME) needs Contacts access to "Provide The Reason Here".

Пример:

Сэр, у меня такая же ошибка, но зачем добавлять в info.plist, на самом деле я не использую функцию контактов в своем приложении, так зачем нам ее добавлять?

Kapil soni 26.02.2020 09:02

@Kapilsoni Убедитесь, что у вас нет доступа к одному или нескольким API, у которых есть доступ к конфиденциальным данным пользователя.

dbrownjave 26.02.2020 13:20

: sir Я использовал в своем приложении только камеру и местоположение?

Kapil soni 26.02.2020 14:31

С помощью Xcode 11 скопируйте ключ NSLocationAlwaysUsageDescription и добавьте его в Info -> Custom iOS Target Properties -> Щелкните + в нижнем левом углу этой вкладки и в качестве значения вставьте какое-то описание, например This app requires location access to function properly..

Краткий ответ на вышеуказанную проблему -

NSLocationAlwaysUsageDescription необходимо обновить, указав следующее описание в файле Info.plist.

{Your App Name} requires access to the location to suggest dengue outbreak zones.

"Missing Purpose String in Info.plist File. Your app's code references one or more APIs that access sensitive user data. The app's Info.plist file should contain a NSLocationAlwaysUsageDescription key with a user-facing purpose string explaining clearly and completely why your app needs the data. Starting spring 2019, all apps submitted to the App Store that access user data will be required to include a purpose string.If you're using external libraries or SDKs, they may reference APIs that require a purpose string. While your app might not use these APIs, a purpose string is still required. You can contact the developer of the library or SDK and request they release a version of their code that doesn't contain the APIs.

Откройте Info.plist как исходный код. Добавьте следующие строки в свой список

<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>$(PRODUCT_NAME) needs Location access for "some reason"!</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>$(PRODUCT_NAME) needs Location access for "some reason"!</string>
<key>NSLocationAlwaysUsageDescription</key>
<string>$(PRODUCT_NAME) needs Location access for "some reason"!</string>

В нашем случае мы использовали NSLocationWhenInUseUsageDescription в нашем приложении, но не NSLocationAlwaysUsageDescription.

Читая комментарии здесь (спасибо matt-oakes), похоже, что NSLocationAlwaysUsageDescription используется одним из фреймворков зависимостей, которые мы используем.

При запуске нашего приложения оно не показывает фактическое модальное разрешение NSLocationAlwaysUsageDescription, поэтому похоже, что оно просто обрабатывается в фоновом режиме.

Таким образом, добавление NSLocationAlwaysUsageDescription в Info.plist устранило предупреждение по электронной почте и не повлияло на поведение приложения ??

Другие вопросы по теме