Ошибка Appstore connect: отсутствует строка назначения в файле Info.plist

154

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

Уважаемый разработчик,

Мы обнаружили одну или несколько проблем с недавней доставкой для вашего приложения XXXXX. Ваша доставка прошла успешно, но вы можете решить следующие проблемы при следующей доставке:

"Отсутствует целевая строка в файле Info.plist. Код вашего приложения ссылается на один или несколько API-интерфейсов, которые обращаются к конфиденциальным данным пользователя. Файл Info.plist приложения должен содержать ключ NSLocationAlwaysUsageDescription с пользовательской строкой назначения, четко и полностью объясняющей, почему вашему приложению требуется Начиная с весны 2019 года, все приложения, представленные в App Store и имеющие доступ к пользовательским данным, должны будут включать строку назначения. Если вы используете внешние библиотеки или SDK, они могут ссылаться на API, для которых требуется строка назначения. Пока ваше приложение Возможно, эти API не будут использоваться, однако целевая строка по-прежнему требуется. Вы можете связаться с разработчиком библиотеки или SDK и попросить, чтобы они выпустили версию своего кода, не содержащую API.

После исправления проблем вы можете использовать Xcode или Application Loader для загрузки нового бинарного файла в iTunes Connect.

С уважением,

Команда App Store

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

Любая идея?

Джон Доу
источник
3
У меня та же проблема с последней сборкой, учитывая, что я даже не использую Location Services в своем приложении. И у Apple нет официального документа об этом изменении.
Хуонг
3
+1 Сделал релиз для того же приложения 2 дня назад и все нормально. 2 дня спустя, просто изменил пару строк кода, чтобы сделать новый выпуск (не добавлял больше Pod или чего-то в этом роде), и я получил это сообщение
Tiago Ornelas
2
Мы столкнулись с той же проблемой. Я подозреваю, что это ошибка в процессе утверждения (надеюсь). Я собираюсь проигнорировать на выходные и надеюсь, что это исправлено в понедельник.
AMB
2
Я столкнулся с точно такой же проблемой только сейчас, хотя наше приложение не нуждается в сервисах определения местоположения всегда. Ему просто нужно NSLocationWhenInUseUsageDescription, для которого у нас уже есть целевая строка. Возможно, это просто сбой на стороне Apple?
ilight
3
И в Apple-fashion ссылка, которую они предоставляют в письме, чтобы исправить это, не работает.
Гвальшингтон

Ответы:

45

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

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

Экспо Документы

gwalshington
источник
25
На самом деле это не «какое-то сообщение, чтобы успокоить Apple», но чтобы дать пользователю знать, ЧТО вы делаете с сгенерированными данными (местоположением) пользователя в этом случае. Это вопрос конфиденциальности, и я думаю, что хорошо быть честным по отношению к пользователям ваших приложений.
Lookaji
4
Попался! Я думал о новичках, которые могут испытывать желание оставить это так! Я не хотел звучать сварливо :) ура!
Lookaji
@gwalshington У меня нет никакого выставочного объекта в app.json
Химаншу Бхалла,
@HeemanshuBhalla Хм, я не знаю почему. В моем app.json он находится вверху и объявлен первый объект. Это место, где вы объявляете номер версии, идентификатор пакета и т. Д. Если вы удалили приложение, возможно, оно выглядит немного иначе?
Гвалшингтон
2
Какой текст печатать, если мы не собираем и данные о местоположении? Нам нужно
Primož Kralj
62

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

Подводя итог, вы должны:

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


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

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

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

Действительно, как Apple заявляет в почте:

Начиная с весны 2019 года все приложения, представленные в App Store и имеющие доступ к пользовательским данным, должны будут содержать строку назначения.

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

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

AnthoPak
источник
2
В своей редакции за апрель 2019 года вы уверены, что амортизация не отменена? Из того, что я вижу, NSLocationUsageDescription - это тот, который устарел.
Смотрите
В электронном письме, которое я получил от Apple, упоминается NSLocationAlwaysUsageDescription, так что я думаю, что он перевернул его.
Бар Дрор
@apricity @DrorBar Извините, ребята, действительно, я допустил ошибку. Это не было отменено, но все еще была ошибка, NSLocationAlwaysUsageDescriptionдолжна быть заменена на NSLocationAlwaysAndWhenInUseUsageDescriptionи NSLocationWhenInUseUsageDescription , а не на NSLocationUsageDescription(как я ранее писал, извините ...). Я обновил свой ответ, чтобы добавить итог процесса.
AnthoPak
48

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

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

<key>NSLocationAlwaysUsageDescription</key>

<string>custom message</string>

<key>NSLocationWhenInUseUsageDescription</key>

<string>custom message</string>

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

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

vroldan
источник
5
Вау, я только что понял, понял, что все тоже это получают!
Кэмерон Эллис
первый ключ изменился в настоящее время на<key>NSLocationUsageDescription</key>
Худи Ильфельд
1
Нужно ли повторно архивировать после обновления info.plist?
Бишой Ханна
Нужно ли увеличивать версию пакета или номер версии, чтобы загрузить новый двоичный файл?
Бар Дрор
20

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

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

Хуан Хосе Рамирес
источник
1
В другом обновлении приложения Apple также запрашивала это разрешение: «Конфиденциальность - Местоположение Всегда Описание использования»
Хуан Хосе Рамирес
2
Так что, если я не использую эти функции, что я должен написать там, ложь, что-то вроде «собирать местоположение для будущего использования, может быть»?
Руслан Шашков
да, яблоко дойдет до вас, если у них возникнут вопросы
Хуан Хосе Рамирес
Я не могу найти список свойств информации в моем xcode 10.1, вы должны были указать, где его найти, я искал настройки сборки как для целей, так и для проекта
Awais Nasir
1
Итак, Targets-> Info-> Custom ios Target Properties было точное местоположение
Awais Nasir
15

Для упрощения вы можете добавить эти строки в ваш 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>
Сачин Наутиял
источник
2
Мне пришлось удалить лишние пробелы в тегах <key>, и тогда это сработало.
Иннич
@innich спасибо, что указал на это, я изменил свой ответ.
Сачин Наутиял
8
## Используйте этот ключ в файле info.plist

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

Сумит Шарма
источник
8

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

Если вы используете внешние библиотеки или SDK, они могут ссылаться на API, которые требуют строку назначения.

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

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

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

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

 <NSLocationAlwaysUsageDescription>

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

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

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

Есть следующие случаи:

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

Apple утверждает, что:

Добавьте NSLocationWhenInUseUsageDescriptionключ и NSLocationAlwaysAndWhenInUseUsageDescriptionключ в ваш файл Info.plist .

и:

Если ваше приложение поддерживает iOS 10 и более ранние версии, добавьте NSLocationAlwaysUsage

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

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

ingconti
источник
3

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

Кальвин
источник
3

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

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

Panda Power
источник
2
Больше комментариев на самом деле ...?
Стив
3

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

Абдул Каюм
источник
1
Да, это ошибка!
Danh Huynh
2

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

не забудьте удалить конечные пробелы

Майкл ван де Вейтер
источник
2

Пожалуйста, просмотрите письмо, которое вы получили от ** App Store Connect **

Определить недостающий ключ введите описание изображения здесь

инструкции

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

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

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

Для $ (PRODUCT_NAME) контактам необходим доступ к «Приведите причину здесь».

Пример:

Зевс
источник
1
Сэр, я получил ту же ошибку, но зачем добавлять в info.plist, на самом деле я не использовал функцию контактов в моем приложении, так почему мы должны добавить ее?
Капил Сони
@Kapilsoni Пожалуйста, убедитесь, что у вас нет доступа к одному или нескольким API, которые имеют доступ к конфиденциальным данным пользователя
Зевс
1
: sir Я использовал только камеру и местоположение в моем приложении?
Капил Сони
2

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

Даниэль Даниелецкий
источник
2

"Отсутствует целевая строка в файле Info.plist. Код вашего приложения ссылается на один или несколько API-интерфейсов, которые обращаются к конфиденциальным данным пользователя. Файл Info.plist приложения должен содержать ключ NSLocationAlwaysUsageDescription с пользовательской строкой назначения, четко и полностью объясняющей, почему вашему приложению требуется Начиная с весны 2019 года, все приложения, представленные в App Store и имеющие доступ к пользовательским данным, должны будут включать строку назначения. Если вы используете внешние библиотеки или SDK, они могут ссылаться на API, для которых требуется строка назначения. Пока ваше приложение эти API-интерфейсы могут не использоваться, однако целевая строка по-прежнему требуется. Вы можете связаться с разработчиком библиотеки или SDK и запросить у них версию своего кода, не содержащую API-интерфейсы.

Откройте 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>
Supriya
источник
1

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

liunianhuaguoyanxi
источник
1

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

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

{Ваше имя приложения} требует доступа к месту, чтобы предложить зоны вспышки денге.

Соман Дубей
источник
0

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

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

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

Таким образом, в итоге, добавление NSLocationAlwaysUsageDescriptionв Info.plist исправило сообщение с предупреждением и не изменило поведение приложения app

Гарри Блум
источник