Если вы используете 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 отдельное поле Privacy Accessed API Types
. Как раз по нему прилетает письмо с ошибками от Apple. В этом поле указываем какое API используем и почему.
Это системные API, которые нужно указывать в манифесте:
File Timestamp: Получаете время когда создан или изменен файл System Boot Time: Информация о запуске приложения и времени работы OS Disk Space: Доступное пространство в хранилище устройства Active Keyboard: Доступ к списку активных клавиатур User Defaults: Если используете User Defaults
Для каждого API по ссылке будет и список доступных причин. Свои причины указывать нельзя.
Если подходит несколько причин, нужно указывать все
Если используете IDFA, добавьте поле Privacy Tracking Enabled и установите YES
. Сразу добавляйте поле Privacy Tracking Domains, здесь нужно указать все домены, которые работают в IDFA.
Если установили
Privacy Tracking Enabled
, то обязательно указать хотя бы один домен.
Чтобы получить какие домены используются для 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
, это из вашего манифеста. Остальные поля это сторонние библиотеки в вашем проекте.