Помилка підключення Appstore: відсутній рядок призначення у файлі Info.plist


153

Я надіслав свій додаток на розгляд до App Store Connect. Хоча додаток все ще переглядається, я отримав електронний лист, щоб повідомити про те, що я повинен виправити помилку. Ось зміст повідомлення:

Шановний розробник,

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

"Рядок цілі відсутності у файлі Info.plist. У коді додатка посилається на один або декілька API, які отримують доступ до конфіденційних даних користувачів. Файл Info.plist додатка повинен містити ключ NSLocationAlwaysUsageDescription з цільовою ціллю користувача, що чітко і повністю пояснює, чому потрібна ваша програма З весни 2019 року всі додатки, подані в App Store, для доступу до даних користувачів, повинні містити цільовий рядок. Якщо ви використовуєте зовнішні бібліотеки або SDK, вони можуть посилатися на API, що вимагають цільовий рядок. можуть не використовувати ці API, цільовий рядок все одно потрібен. Ви можете зв’язатися з розробником бібліотеки або SDK і попросити випустити версію коду, яка не містить API.

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

З найкращими побажаннями,

Команда App Store

Мій додаток повністю створено за допомогою Expo, і я не знаю, як отримати доступ та змінити Info.plist.

Будь-яка ідея?


3
У мене така ж проблема з останньою збіркою, враховуючи, що я навіть не використовую служби локації у своєму додатку. І Apple не має офіційного документа про цю зміну.
хуон

3
+1 Зробив випуск цього ж додатка 2 дні тому, і все добре. Через 2 дні я просто змінив пару рядків коду, щоб зробити новий реліз (не додав більше Pods або щось подібне), і я отримав це повідомлення
Tiago Ornelas,

2
У нас виникла та сама проблема. Я підозрюю, що це помилка в процесі затвердження (сподіваємось). Я буду ігнорувати вихідні і сподіваюся, що це виправлено в понеділок.
AMB

2
Я зіткнувся з такою ж точною проблемою саме зараз, хоча нашій програмі дійсно не потрібні служби локації завжди. Він просто потребує NSLocationWhenInUseUsageDescription, для якого у нас вже є цільовий рядок. Напевно, це лише глюк в кінці Apple?
близько

3
І в Apple-моді посилання, яке вони надають в електронній пошті, щоб виправити це, порушено.
gwalshington

Відповіді:


45

Якщо ви використовуєте Expo, ви можете додати рішення, додавши infoPlist до app.json так:

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

Документи Expo


25
Насправді це НЕ "якесь повідомлення для заспокоєння Apple", а щоб повідомити користувачеві, що ви робите з генерованими користувачем даними (місцезнаходженням) у цьому випадку. Це питання конфіденційності, і я думаю, що добре бути справедливим до користувачів ваших додатків.
Lookaji

4
Отримав! Я думав новачкам, які можуть спокуситись так залишити! Я не хотів звучати бурхливо :) ура!
Lookaji

@gwalshington У мене немає жодного об'єкта експозиції в app.json
Heemanshu Bhalla

@HeemanshuBhalla Хм, я не знаю чому. У моєму app.json він знаходиться вгорі та оголошено перший об’єкт. Тут ви декларуєте номер версії, ідентифікатор пакету тощо. Якщо ви викинули додаток, можливо, воно виглядає дещо інакше?
gwalshington

2
Який текст набрати, якщо ми не збираємо та дані про місцезнаходження? Нам потрібно скласти брехню: S
Primož Kralj

62

EDIT Квітень 2019 : Тепер ви повинні додати ці два ключі, оскільки почалася весна 2019 року. Зверніть увагу , що NSLocationAlwaysUsageDescriptionв даний час засуджується (з прошивкою 11) і був замінений NSLocationAlwaysAndWhenInUseUsageDescriptionі NSLocationWhenInUseUsageDescription. Якщо ви хочете підтримувати нижче, ніж iOS 11, вам доведеться використовувати три значення.

Підводячи підсумки, ви повинні:

  • Додайте NSLocationAlwaysAndWhenInUseUsageDescriptionІ NSLocationWhenInUseUsageDescriptionдля iOS 11 та більше
  • І додайте, NSLocationAlwaysUsageDescriptionякщо ви хочете підтримувати iOS 10 і менше
  • І нарешті, ви можете додати, NSLocationUsageDescriptionякщо хочете підтримувати iOS 8 і менше.


Ви можете подати свою програму, навіть якщо отримали це повідомлення!

Я вчора стикався з тією ж проблемою, навіть якщо додаток не використовує функцію розташування. Це може бути пов’язане з деякими рамками, включеними в проект, які мають цю необов'язкову особливість.

Я можу підтвердити, що мій додаток затверджено навіть без клавіші NSLocationAlwaysUsageDescriptionтаNSLocationWhenInUseUsageDescriptioninfo.plist

Дійсно, як Apple заявила у пошті:

Починаючи з весни 2019 року всі додатки, що надсилаються в App Store, повинні мати доступ до даних користувачів, повинні містити цільовий рядок.

Тож єдине, що потрібно зробити - це додати цей ключ (зараз краще, щоб ви не забули) у свій проект, щоб він був включений у наступне оновлення .

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


2
У редакції квітня 2019 року ви впевнені, що у вас не буде скасовано застарілість? З того, що я бачу, NSLocationUsageDescription є тим, що застаріло. Дивлячись тут: developer.apple.com/library/archive/documentation/General/…
apricity

Електронний лист, який я отримав від яблука, згадує NSLocationAlwaysUsageDescription, тому я думаю, що він змінив його.
Dror Bar

@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. Після отримання цього електронного листа я можу перевірити додаток навіть тоді, коли вони сказали, що у його складання виникли деякі проблеми.

Сподіваюся, ця робота для вас, хлопці.


5
Ого, я щойно це зрозумів, зрозумів, що всі теж отримують це!
Камерон А. Елліс

перший ключ змінився відтепер<key>NSLocationUsageDescription</key>
Худі

1
Чи доведеться повторно архівувати після оновлення info.plist?
Bishoy Hanna

Чи потрібно збільшувати версію пакета чи номер версії, щоб завантажити новий бінарний файл?
Dror Bar

20

Це нова вимога від apple, навіть якщо ви не використовуєте місцезнаходження. Якщо ви хочете додати дозволи в Xcode, знайдіть "Конфіденційність - опис використання місцеположення" та "Конфіденційність - Місце розташування, коли використовується, Опис використання" та введіть спеціальний рядок для кожного з них.

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


1
В іншому оновлення програми Apple також вимагала цього дозволу: "Конфіденційність - Місцерозташування завжди описує використання"
Juan José Ramírez

2
Тож якщо я не використовую ці функції, що я маю написати там, брехня, щось на кшталт "збирати місце для подальшого використання, можливо"?
Руслан Шашков

так, яблуко до вас звернеться, якщо у них виникнуть питання
Хуан Хосе Рамірес

Я не в змозі знайти список властивостей інформації в моєму xcode 10.1, ви повинні вказати, де його знайти, я шукав налаштування збірки і для цілей, і для проекту
Awais Nasir

1
Гаразд Цілі -> Інформація-> Спеціальні властивості ios Target були точним місцем розташування
Awais Nasir

15

Для кращого спрощення ви можете додати ці рядки у свій інформаційний список. Ці помилки виникають через те, що починаючи з весни 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

@innich дякую, що ти це вказав, я змінив свою відповідь.
Сачин Наутіял

8
## Використовуйте цей ключ у файлі info.plist

NSLocationAlwaysUsageDescription Ваше місцезнаходження потрібне для переваг xyz для вас NSLocationWhenInUseUsageDescription Ваше місцезнаходження потрібно для переваг xyz для вас


8

Ми отримали той самий електронний лист, і ми взагалі не використовуємо CoreLocation. Після швидкого пошуку ми виявили, що Parse SDK може використовувати CoreLocation. В електронній пошті від Apple чітко сказано:

Якщо ви використовуєте зовнішні бібліотеки або SDK, вони можуть посилатися на API, для яких потрібен рядок призначення.

Це означає, що ваш код або будь-яка інша бібліотека або SDK можуть використовувати CoreLocation, навіть якщо ви не використовуєте його, вам потрібно надати опис конфіденційності для "Коли використовується" та "Завжди використовувати".

Це також щось нове від Apple, і поки що це лише попередження, але його потрібно буде навесні 2019 року для нових заявок.


Це просто дурно .... Якщо я його не використовую, це може змусити людей не завантажувати мою програму саме через це. -_-
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.


3

Ці відповіді говорять вам про те, як дотримуватися правил App Store, щоб уникнути попередження, але справжнє виправлення було б для Expo, що дозволить вам відключити їх вимоги SDK для служб локації, якщо ви їх фактично не використовуєте - я не впевнений, чи це можливо.


3

в тому ж номері 19 лютого, я отримав електронний лист із купою дозволів, якими я не користуюся, я припускаю, що вони із плагінів. Apple каже, що 19 березня це вимога, тому я додаю їх у info.plst та завантажую ще раз.

Це справді дуже нерозумно.


2
Більше коментаря дійсно ...?
Стів

3

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


1
Так, це помилка!
Danh Huynh


2

Перегляньте електронний лист, який ви отримали від ** App Store Connect **

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

Інструкції

  1. Відкрийте файл info.plist.

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

  3. Додати опис використання:

$ (PRODUCT_NAME) потребує доступу контактів до "Наведіть причину тут".

Приклад:


1
сер, я отримав таку ж помилку, але чому додати до info.plist насправді я не використовував контактну функцію в моєму додатку, тому чому нам потрібно додати її?
Капіль соні

@Kapilsoni Будь ласка, переконайтеся, що ви не маєте доступу до одного або декількох API, які мають доступ до чутливих даних користувачів
Зевс,

1
: сер, я використовував у своєму додатку лише камеру та місцезнаходження?
Капіль соні

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>

1

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


1

Коротка відповідь на вищевказану проблему -

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

{Ваше ім'я додатка} вимагає доступу до місця, щоб запропонувати зони спалаху денге


0

У нашому випадку ми використовували NSLocationWhenInUseUsageDescriptionу своєму додатку, але ні NSLocationAlwaysUsageDescription.

Читаючи з коментарів тут (спасибі матові дуби), схоже, що NSLocationAlwaysUsageDescriptionвін використовується однією із систем залежності, яку ми використовуємо.

Запустивши наш додаток, він не відображає фактичний режим дозволу NSLocationAlwaysUsageDescription, тому, схоже, просто обробляти це у фоновому режимі.

Отже, підсумовуючи додавання NSLocationAlwaysUsageDescriptionдо Info.plist, виправлено повідомлення з попередженням і не змінилося жодної поведінки в додатку 👍🏻

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