Privacy Manifests

Privacy Manifests

Самир, Surf Flutter Developer

Что за Privacy Manifests?

На конференции разработчиков WWDC23 были представлены  «декларации конфиденциальности», или privacy manifests, в которых разработчики могут описать, какие API или данные в каких целях использованы в приложении или библиотеке. 

И хотя представлены они были в 2023-м, только в мае этого года Apple стали требовать заполнять их.

Сделано это, чтобы:

  • разработчики понимали, как сторонние библиотеки используют переданные данные;
  • обезопасить зависимости путём введения подписей для библиотек;
  • предоставить дополнительную защиту данных. 

По крайней мере, так говорят сами Apple.

Зачем оно всё нужно?

C 13 марта 2024 при публикации приложения в App Store Apple проверяла на наличие манифеста и причин использования API. 

Если они находили несоответствие, то публикующий получал письмо с указанием списка таких мест. 

Но вот с 1 мая 2024 года публикация приложения с такими проблемами стала блокироваться.

Как правильно заполнить манифест?

Рекомендуем заполнять манифест конфиденциальности в XCode последней версии — на момент написания это 15.3. 

Открываем папку iOS, затем File > New > File и выбираем App Privacy.

Создание нового файла в XCode
Создание нового манифеста в XCode

Внутри него будут 4 пункта:

Вся информация, содержащаяся в манифесте

Privacy Tracking Enabled

Использует ли приложение сторонние SDK для отслеживания пользовательских действий с целью дальнейшей аналитики. Если использует — указывайте YES, иначе — NO.

Privacy Tracking Domains

Это домены, через которые идет отслеживание. 

Если используете Firebase Crashlytics, укажите firebase-settings.crashlytics.com.

Другие домены, к сожалению, просто так не найти, но их можно отследить так.


Далее запускаем приложение из XCode в Profile моде:

Запуск приложение в режиме profile в XCode

Открываем инструмент разработчика по отслеживанию запросов:

Открытие инструментов разработчика в XCode
Выбор инструмента отладки сетевых запросов в XCode

Потом — просто тыкаем своё приложение. Через время в графе Point of Interest отобразятся домены, которые указываем в манифесте.

Отслеживание запросов для аналитики пользовательских действий

Но инструмент не идеален — он может показать не все домены.

Если какой-то домен здесь не указать, то запросы по этому домену будут блокироваться.

Заполненные данные об отслеживании пользовательских действий

Privacy Nutrition Label Types

Здесь описывается, как приложение или сторонние SDK используют различные типы данных. Указанные тут данные отображаются в App Store на странице приложения:

Вот так эта информация отображается в App Store

В этой секции каждая запись имеет 4 поля:

Collected Data Type — это тип собираемых данных.

Данные разделены на следующие категории:

  • контактная информация - имя, номер телефона, адрес почтового ящика;
  • здоровье и фитнес;
  • финансовая информация - информация и платежах, картах, истории покупок;
  • геопозиция — точная и приблизительная;
  • чувствительная информация;
  • контакты;
  • пользовательский контент;
  • история браузера;
  • история поиска;
  • идентификаторы устройства или пользователя;
  • история покупок;
  • тело — голова, рука (что бы это ни значило);
  • другие данные.

Linked To User — связаны ли эти данные с личностью пользователя? Например, геопозиция может быть не связана, но вот контактная информация — определённо.

Used For Tracking — используется ли этот тип данных для отслеживания? Например, передаем ли мы чувствительную информацию для аналитики?

Collection Purposes — список причин, по которым приложение или SDK собирает эти данные и их использует. Таких причин может быть всего 6:

  • Analytics — для аналитики;
  • App Functionality — для обеспечения работы функционала приложения;
  • Developer’s Advertising and Marketing — для рекламы и продвижения разработчика;
  • Product Personalization — для подстраивания продукта под нужды пользователя;
  • Third Party Advertising — для рекламы и продвижения третьих лиц;
  • Other Purposes — иные причины.
Заполненные данные об использовании (простите) данных

Privacy Accessed API Types

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

Даже если пользователь даст разрешение, fingerprinting запрещен Apple. Поэтому Apple сформировала список API, которые можно использовать для этих целей.

Проанализируем код приложения, и, если обнаружим эти API, сравним нашу причину использования с теми, что указаны Apple. Тут может быть 3 случая:

  • API используется не по причинам, указанным в документации Apple. Это не несет ничего пользователю — мы должны отказаться от использования;
  • API используется не по причинам, указанным в документации Apple, и это использование улучшает опыт пользователя — мы можем подать запрос на утверждение причины использования;
  • API  используется по причинам, указанным в документации Apple — просто указываем их в манифесте.

Таких API на данный момент 5:

  • User Defaults = shared_preferences;
  • System Boot Time;
  • File TimeStamp;
  • Disk Space;
  • Active Keyboards.

В Flutter-приложениях напрямую использовать можно только User Defaults, все остальные пункты используются самим движком, их указывать не нужно. 

Заполняем причину использования этого API

Для каждого типа API свой перечень объяснений использования — пункт для Disk Space нельзя использовать для User Defaults и наоборот.

Научите Apple объяснять

Внутри Flutter-отдела Surf мы долго обсуждали требования Apple. 

С одной стороны, у Apple была отдельная страница с SDK, в которых обязательно должен быть включен Privacy Manifest. 

С другой — многие владельцы пакетов начали за 2 недели до 1 мая добавлять манифесты. Было непонятно — нужно ли обновлять вообще все пакеты или только указанные Apple? 

Другой вопрос — нужно ли нам обновлять Flutter? Манифест был добавлен в него только с версии 3.19.3. Означало ли это, что всем принудительно надо обновлять Flutter? 

Официальная поддержка молчала и ссылалась на друг друга.

Как оказалось, ничего из этого нам не было нужно. Несколько наших приложений уже успели пройти ревью в App Store — достаточно было добавить один Privacy Manifest в приложение. 

Мы пришли к выводу, что манифесты для SDK — вспомогательный элемент. Он позволит разработчикам не заполнять основной манифест полностью. А поскольку требования по включению манифестов или подписи сторонних SDK не проверяется жёстко, принудительно обновляться не нужно.

А как ваши приложения проходили ревью? Делитесь опытом в комментариях.

Surf Flutter Team




Report Page