Если вы используете User Defaults или собираете данные о пользователе, то вам нужно заполнить манифест. Всё что вы укажите появиться на странице приложения.
Если у библиотеки есть манифест, то не нужно дублировать в ваш манифест. Когда архивируете проект, все манифесты объединяются в один.
Добавляем Манифест
Нажмите ⌘+N и выберите App Privacy-файл.
У каждого таргета свой манифест, поэтому внимательно ставьте чекмарк нужному таргету. Если манифест одинаковый для всех таргетов, то можно сразу указать несколько таргетов.
Структура Манифеста
Манифест это plist-файл с расширением .xcprivacy.
Манифест состоит из трех полей. Первое про трекинг — его заполняете когда собираете почту или имя. Второе отвечает за системные API, например, User Defaults. Третье отвечает за IDFA.
Разберем каждое поле подробнее.
Трекинг пользователя
Поле Privacy Nutrition Label Types описывает какие данные собираем о пользователе. Все что укажите в манифесте, будет видно в поле App Privacy на странице приложения:
Collected Data Type — это тип данных, которые собираете о пользователе. Например, контакты или информация о платежах. Все типы на официальном сайте, свои добавлять нельзя. В plist-файл добавлять строку из Data type.
Для каждого типа данных создаете новый Item. Поля ниже нужно указывать для каждого типа данных:
Linked to User — если собираете данные, связанные с личностью пользователя, ставьте YES.
Used for Tracking — если ли данные используются для трекинга, ставим YES.
Collection Purposes — здесь указываем причины почему собираем данные. Например, аналитика, реклама или аутентификация. Выбирать из доступного списка причин, свои указывать нельзя.
Системное API
Для API отдельное поле Privacy Accessed API Types. Как раз по нему прилетает письмо с ошибками от Apple. В этом поле указываем какое API используем и почему.
Это системные API, которые нужно указывать в манифесте:
-
developer.apple.com
File Timestamp
Получаете время когда создан или изменен файл
-
developer.apple.com
System Boot Time
Информация о запуске приложения и времени работы OS
-
developer.apple.com
Disk Space
Доступное пространство в хранилище устройства
-
developer.apple.com
Active Keyboard
Доступ к списку активных клавиатур
-
developer.apple.com
User Defaults
Если используете User Defaults
Для каждого API по ссылке будет и список доступных причин. Свои причины указывать нельзя.
IDFA
Если используете IDFA, добавьте поле Privacy Tracking Enabled и установите YES. Сразу добавляйте поле Privacy Tracking Domains, здесь нужно указать все домены, которые работают в IDFA.
Чтобы получить какие домены используются для IDFA, откройте профайлер Product → Profile. Теперь в окне выберите Network:
В левом верхнем углу жмем кнопку Start Recording. Выбираете вкладку Points of Interest, здесь будет список всех доменов. В колонке Start Message видно домен и указано что его не добавили в манифест.
Профайл иногда сбоит, если в Points of Interest ничего не показывает или вообще пропадает, вот второй способ. Выбираете вкладку вашего приложения, а в сессиях видны все домены.
Теперь придется проверить каждый или участвует он в IDFA. Сделать придется вам лично.
Манифест в библиотеках
Если автор библиотеки не добавил манифест, то разработчик должен заполнить манифест сам.
Если в библиотеке есть манифест и он заполнен, то не нужно дублировать информацию в главный манифест. Все манифесты объединяются в один, когда собираем архив.
Если в манифесте есть ошибки, то разработчику придется самому дополнить манифест внутри проекта. Например, Firebase Сrashlytics использует домен firebase-settings.crashlytics.com. В своем манифесте они это не указали:
Мы это нашли с помощью профайлера. В такой ситуации добавляем домен в свой манифест, это перекроет проблемное поле в манифесте от Firebase.
В манифестах библиотек допускают ошибки — обязательно перепроверяйте.
Если ошибка в Манифесте
На почту придут ошибки только про системное API:
Чтобы быстро найти ключи, введите в поиске NS. Именно их не хватает в вашем Манифесте. Даже если вы не используете это API, его могут использовать библиотеки, которые вы добавили в проект.
Вот NS ключи, и ссылки на ключ и причину на сайте Apple:
- NSPrivacyAccessedAPICategoryFileTimestamp- NSPrivacyAccessedAPICategorySystemBootTime- NSPrivacyAccessedAPICategoryDiskSpace- NSPrivacyAccessedAPICategoryActiveKeyboards- NSPrivacyAccessedAPICategoryUserDefaults
Собираем архив Product -> Archive. Правой кнопкой по архиву, выбираем Generate Privacy Report.
В экспорте PDF-файл. Все манифесты объединились в итоговый:
Все поля что с расширением .app, это из вашего манифеста. Остальные поля это сторонние библиотеки в вашем проекте.