Я отправил свое приложение на рассмотрение в 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 и изменить его.
Есть идеи?
Такая же проблема здесь, но не изменил Info.plist.
Та же проблема. Я просто сделал крошечное изменение, сделал новую сборку и получил это. У меня есть пустой NSLocationWhenInUseUsageDescription в Info.plist, но для него есть строки перевода.
+1 Сделал релиз для того же приложения 2 дня назад и все нормально. 2 дня спустя я просто изменил пару строк кода, чтобы выпустить новую версию (не добавлял больше подов или что-то в этом роде), и я получил это сообщение
Мы столкнулись с той же проблемой. Я подозреваю, что это ошибка в процессе утверждения (надеюсь). Я собираюсь проигнорировать на выходных и надеюсь, что в понедельник все исправят.
Я столкнулся с той же самой проблемой только сейчас, хотя нашему приложению на самом деле не нужны службы определения местоположения Always. Ему просто нужно NSLocationWhenInUseUsageDescription, для которого у нас уже есть целевая строка. Наверное, это просто глюк со стороны Apple?
И в Apple-моде ссылка, которую они предоставляют в электронном письме, чтобы исправить это, не работает.
Нужно ли переархивировать после обновления info.plist?
У меня такая же проблема. Я установил плагин ionic diagnostic и получил этот NSBluetoothAlwaysUsageDescription в Info.plist





Мы получили такое же электронное письмо, и мы вообще не используем 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 года для новых заявок.
Это просто глупо .... Если я его не использую, это может заставить людей не скачивать мое приложение только из-за этого. -_-
Не совсем. Предупреждение с просьбой использовать вашу локализацию не будет отображаться, если где-то в коде не будет вызван CLLocationManager.requestWhenInUseAuthorization(). Apple проанализировала код каждого приложения, чтобы узнать, можно ли вызвать такую функцию. Если он никогда не вызывается, предупреждение не появляется.
Эта проблема возникает из-за того, что вы не включили
<NSLocationAlwaysUsageDescription>
для вашего приложения. Я столкнулся с той же проблемой, когда пытался отправить свое приложение в AppStore. После обработки приложения мне пришло такое же письмо. Я просто добавил описание, и теперь оно решено.
Надеюсь это поможет.
Это мне помогло. Если вы используете Location в своем приложении (или, может быть, просто всегда), вам нужно добавить эту строку и строку под ней. <key>NSLocationAlwaysUsageDescription</key> <string>Always And In Use Permission</string>
У меня есть несколько приложений в магазине, и я попытался распространить версию для QA, и то же самое произошло в двух разных приложениях. Я думаю, что это новый критерий для приема загрузок сборок в Appstore connect.
Решение простое, добавьте следующие строки в файл .plist.
<key>NSLocationAlwaysUsageDescription</key>
<string>custom message</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>custom message</string>
PS: В моем случае я не использовал какую-либо функцию определения местоположения, но я добавил эти строки, чтобы соответствовать рекомендациям по подключению Appstore. Кстати, после получения этого письма я мог протестировать приложение, даже когда они сказали, что в его сборке есть некоторые проблемы.
Я надеюсь, что это сработает для вас, ребята.
Вау, я только что понял, понял, что все тоже это понимают!
первый ключ теперь изменился на <key>NSLocationUsageDescription</key>
Нужно ли переархивировать после обновления info.plist?
Нужно ли мне увеличивать версию пакета или номер версии, чтобы загрузить новый двоичный файл?
ИЗМЕНИТЬ апрель 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/…
В электронном письме, которое я получил от Apple, упоминается NSLocationAlwaysUsageDescription, поэтому я думаю, что он отменил это.
@apricity @DrorBar Извините, ребята, я действительно ошибся. Это не было отменено, но ошибка все еще была, NSLocationAlwaysUsageDescription следует заменить на NSLocationAlwaysAndWhenInUseUsageDescription и NSLocationWhenInUseUsageDescription , а не на NSLocationUsageDescription (как я ранее писал, извините…). Я обновил свой ответ, чтобы подвести итог процесса.
## Используйте этот ключ в файле 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.",
},
},
}
На самом деле это НЕТ «какое-то сообщение, чтобы успокоить Apple», но чтобы дать пользователю знать, ЧТО вы делаете в данном случае с сгенерированными пользователем данными (местоположением). Это вопрос конфиденциальности, и я считаю, что быть справедливым по отношению к пользователям ваших приложений - это хорошо.
Попался! Я думал о новичках, у которых может возникнуть соблазн оставить все как есть! Я не хотел показаться сварливым :) Ура!
@gwalshington У меня нет объекта expo в app.json
@HeemanshuBhalla хм, я не знаю почему. В моем app.json он находится наверху и является первым объявленным объектом. Здесь вы объявляете номер версии, идентификатор пакета и т. д. Если вы удалили приложение, может быть, оно выглядит немного иначе?
Какой текст набирать, если мы не собираем данные о местоположении? Нам нужно сочинить ложь: S
@ PrimožKralj Да, к сожалению, я не собираю данные о местоположении, но это заставило меня отправить сообщение.
Возможны следующие случаи:
NSLocationAlwaysAndWhenInUseUsageDescription (iOS>11)
NSLocationWhenInUseUsageDescription (iOS>11)
NSLocationAlwaysUsageDescription (iOS<=10)
NSLocationUsageDescription (seems very old, iOS8?)
Apple заявляет по адресу:
Add the
NSLocationWhenInUseUsageDescriptionkey and theNSLocationAlwaysAndWhenInUseUsageDescriptionkey 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 также запрашивала это разрешение: «Конфиденциальность - Описание использования местоположения всегда»
Итак, если я не использую эти функции, что я должен там написать, ложь, что-то вроде «собрать место для будущего использования, может быть»?
да, Apple свяжется с вами, если у них возникнут вопросы
Я не могу найти Информация о недвижимости в моем xcode 10.1, вы должны были упомянуть, где его найти, я искал настройки сборки как для целей, так и для проекта
Итак, Targets-> Info-> Custom ios Target Properties было точное местоположение
Для большего упрощения вы можете добавить эти строки в свой info.plist. Эти ошибки возникают из-за того, что Начиная с весны 2019 года, все приложения, представленные в App Store, которые имеют доступ к пользовательским данным, должны будут включать целевую строку.
Добавьте следующие строки в свой список
<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 спасибо, что указали на это, я изменил свой ответ.
та же проблема от 19 февраля, получил письмо с кучей разрешений, которые я не использую, я предполагаю, что они от плагинов. Apple заявила 19 марта, что это является обязательным требованием, поэтому я добавляю их в info.plst и загружаю снова.
Это действительно очень глупо.
Больше комментария на самом деле ...?
я имел
<key>NSLocationWhenInUseUsageDescription </key>
вместо
<key>NSLocationWhenInUseUsageDescription</key>
обязательно удалите завершающие пробелы
Я также сталкиваюсь с той же проблемой, но через 27 часов я получил электронное письмо об утверждении, даже если я ничего не сделал. Так что подождите примерно 24 часа, а не проделывать весь этот процесс снова.
Да, это ошибка!
Просмотрите электронное письмо, полученное от ** App Store Connect **
инструкции
Откройте файл info.plist.
Добавьте и найдите недостающий ключ из предоставленных опций (например, Контакты = Privacy - Contacts Usage Description)
Добавить описание использования:
$(PRODUCT_NAME) needs Contacts access to "Provide The Reason Here".
Сэр, у меня такая же ошибка, но зачем добавлять в info.plist, на самом деле я не использую функцию контактов в своем приложении, так зачем нам ее добавлять?
@Kapilsoni Убедитесь, что у вас нет доступа к одному или нескольким API, у которых есть доступ к конфиденциальным данным пользователя.
: sir Я использовал в своем приложении только камеру и местоположение?
С помощью 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 устранило предупреждение по электронной почте и не повлияло на поведение приложения ??
У меня такая же проблема с последней сборкой, поскольку я даже не использую службы геолокации в своем приложении. И у Apple нет официального документа об этом изменении.