Проблема с ключом info.plist, связанным с HealthKit - Apple

Сегодня мне удалось столкнуться с очень странной ошибкой, связанной с ключами Info.plist в приложении, которое использует расширения WatchKit / WatchKit. Ключевой вопрос здесь NSHealthUpdateUsageDescription, Это необходимо вместе с кратким описанием, когда отслеживаются любые данные, относящиеся к HealthKit, предоставленному Apple.

Сложность здесь заключается в том, что при "Архивации" происходит сборка указанного приложения при подготовке к отправке. XCode говорит: "Отсутствует ключ" NSHealthUpdateUsageDescription необходим по причине, указанной выше.

Когда сборка приложения попадает на страницу AppStore Connect, его указатель тоже из-за его идентификатора пакета, затем процесс исчезает и будет выдано сообщение об ошибке от Apple, говорящее об этом.

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

Мы обнаружили одну или несколько проблем с недавней доставкой для вашего приложения "AirTime - Считайте свои прыжки!". Пожалуйста, исправьте следующие проблемы, затем загрузите снова.

Строка Missing Purpose String в файле Info.plist - код вашего приложения ссылается на один или несколько API, которые получают доступ к конфиденциальным данным пользователя. Файл Info.plist приложения должен содержать ключ NSHealthUpdateUsageDescription с целевой строкой, ориентированной на пользователя, которая четко и полностью объясняет, почему вашему приложению нужны данные. Начиная с весны 2019 года все приложения, представленные в App Store, которые получают доступ к данным пользователя, должны будут содержать строку назначения. Если вы используете внешние библиотеки или SDK, они могут ссылаться на API, для которых требуется строка назначения. Хотя ваше приложение может не использовать эти API, строка назначения по-прежнему требуется. Вы можете связаться с разработчиком библиотеки или SDK и попросить, чтобы они выпустили версию своего кода, которая не содержит API. Узнайте больше ( https://developer.apple.com/documentation/uikit/core_app/protecting_the_user_s_privacy).

С наилучшими пожеланиями,

Команда App Store

Ища SO, я не нашел ни одного поста, связанного с ключевыми проблемами info.plist, кроме вещей, связанных с CFBundleIcons и т. Д. Это не дубликат, я чувствую, что это вопрос, который будет полезен для будущих разработчиков, когда на него ответят.

Спасибо

2 ответа

Похоже, ваш код ссылается на API, который имеет доступ к конфиденциальным данным от пользователя (в вашем случае вам необходим доступ к обновлению данных о работоспособности). Если вы хотите получить доступ к этим данным, вы должны запросить у пользователя разрешение. Это можно сделать в Info.plist, добавив этот ключ в Info.plist.

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

В этом случае вы должны установить строку с четким назначением для ключа NSHealthUpdateUsageDescriptionзачем обновлять данные о здоровье.

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

Проблема здесь была.. NSHealthUpdateUsageDescription and NSHealthShareUsageDescription не нужны в WatchKit Info.plist, как я предполагал из сообщения об ошибке Apple.

Будущая заметка для любого, кто найдет этот вопрос NSHealthUpdateUsageDescription необходим в вашем Info.plist, если вы "читаете" данные, которые вы отслеживаете... это может означать несколько вещей, но для этого примера скажем, что вы отслеживаете данные и публикуете их в таблицу лидеров... вам нужен этот ключ!

NSHealthShareUsageDescription используется, когда вы "записываете" данные, которые вы отслеживаете

Надеюсь, этот вопрос будет полезен для тех, кто столкнется с той же проблемой в будущем!

Спасибо всем.

В случае моего автономного приложения WatchOS с доступом к Health Kit это помогло:

  1. Я добавил ключи "Privacy - Health Share Usage Description" и "Privacy - Health Update Usage Description" с некоторым текстом в качестве значений в файл Info.plist в папке [MyApp] WatchKit Extension.

  2. Затем я создал другую папку [MyApp] на том же уровне, что и папка [MyApp] WatchKit Extension. Я скопировал файл Info.plist из папки [MyApp] WatchKit Extension в новую папку [MyApp] и удалил все ключи, кроме двух упомянутых выше.

  3. Затем в разделе "Цели" (вы попадаете туда, когда щелкаете имя своего проекта в Навигаторе проекта в верхней части левой части Xcode), я щелкнул первую цель (MyApp) и в разделе "Упаковка" для ключа "Info.plist File" Я добавил путь к новому файлу Info.plist - [Myapp]/Info.plist

Я очистил папку сборки и получил ошибку при повторной попытке сборки (в верхнем меню Продукт - Сборка) - новая ошибка: (ошибка: несколько команд создают '[...]/Info.plist': [...]

Я перезапустил XCode, снова очистил папку сборки и снова нажал на Build. На этот раз меня спросили, нормально ли что-то почистили, и я согласился.

Тогда это сработало.

Примечание: в прошлом у меня также были упомянутые выше ключи в файле Info.plist в приложении [MyApp] WatchKit, и, насколько я помню, это вызывало проблемы. Итак, в этом файле у меня нет этих двух ключей.

Мой ответ основан на этом: https://developer.apple.com/forums/thread/122660?answerId=382719022#382719022 Позже я нашел и этот пост.

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