Если вы разработчик iOS (или Flutter, как я) приложений, вероятно, вы уже сталкивались с предупреждением от Apple: ITMS-91053: Missing API Declaration.
![Письмо от Apple Письмо от Apple](https://habrastorage.org/getpro/habr/upload_files/047/5eb/cd4/0475ebcd460c18b7c391dad35195ce17.png)
Почему Apple отправляет письма разработчикам?
Apple стремится улучшать защиту данных пользователей и требует от разработчиков предоставления детальной информации о том, как их приложения используют личные данные. Введение требования о файле PrivacyInfo.xcprivacy направлено на то, чтобы разработчики явно указывали, какие данные собирают их приложения, и для каких целей эти данные используются.
Крайний срок для заполнения файла PrivacyInfo.xcprivacy
До 1 мая 2024 года все приложения должны быть обновлены и должны содержать файл PrivacyInfo.xcprivacy с корректно заполненной информацией о конфиденциальности.
Для начала обновим библиотеки
Большинство библиотек уже включают в себя Privacy Manifest. Проверьте обновления для используемых вами библиотек.
![Alamofire уже добавили Privacy Manifest, а ты нет Alamofire уже добавили Privacy Manifest, а ты нет](https://habrastorage.org/getpro/habr/upload_files/689/16f/18f/68916f18f724268dd6503d17a59aa6d1.png)
Создание и заполнение файла PrivacyInfo.xcprivacy
Создание файла
File -> New -> File
Выберите шаблон App Privacy
Назовите файл PrivacyInfo и сохраните
Заполнение файла
Указать тип данных из письма от Apple (например, местоположение, контакты, фотографии и т.д.)
Найти категорию в документации
Описать, как эти данные используются вашим приложением и обосновать необходимость сбора этих данных
![Заполненный Privacy Manifest Заполненный Privacy Manifest](https://habrastorage.org/getpro/habr/upload_files/6e8/be7/588/6e8be7588608f9ee911e3f4f1ecb82d9.png)
Пример моего кода:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>NSPrivacyTracking</key>
<false/>
<key>NSPrivacyTrackingDomains</key>
<array/>
<key>NSPrivacyCollectedDataTypes</key>
<array/>
<key>NSPrivacyAccessedAPITypes</key>
<array>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategoryFileTimestamp</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>3B52.1</string>
</array>
</dict>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>Disk space</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>7D9E.1</string>
</array>
</dict>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>System boot time</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>35F9.1</string>
</array>
</dict>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>User defaults</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>CA92.1</string>
</array>
</dict>
</array>
</dict>
</plist>
Советы по заполнению
Убедитесь, что вы указываете все данные, которые собираете, а также цель сбора данных.
Будьте честны. Это поможет избежать проблем с проверкой приложения.
Если вы не знаете с какой целью в приложении используется определённая категория, вы можете найти в коде конкретные методы. Marco Eidinger рассказывает об этом способе в своей статье.
Заключение
Не забудьте, что до 1 мая 2024 все приложения должны быть обновлены с учетом новых требований конфиденциальности и должны содержать файл PrivacyInfo.xcprivacy. Не затягивайте с обновлением файла!
Если было интересно и полезно, приглашаю в свой Linkedin.
Полезные ссылки
Комментарии (6)
NineNineOne
04.04.2024 08:30Чуть больше недели назад писал статью на эту тему: https://telegra.ph/59-Nastraivaem-PrivacyInfoxcprivacy-03-23.
Думал, такой контент на хабре не пройдет модерацию
vitalikbov Автор
04.04.2024 08:30Я тоже написал около недели назад. Всё это время ждал модерацию, т.к. статья сначала попадает в песочницу
cher11
04.04.2024 08:30+1А почему не пройдет? Статья же полезная, после 1 мая ещё и просмотры вырастут
aLeXv17
Виталий, спасибо за статью.
Не нашел в доках ответы (может, плохо искал) на возникшие вопросы, может ты знаешь или сталкивался?
1) Если либа не собирает никакие privacy и не использует api нужен ли ей пустой файл xcprivacy?
2) Что делать, если в приложении фичи лежат в local pods и соответственно линкуются как фреймворки. И в итоге они хоть и являются частью кода и даже репозитория, но лежат отдельно от основного таргета. Следует ли для них отдельно добавлять свои xcprivacy файлы или достаточно одного общего для всего приложения?
vitalikbov Автор
Спасибо за отзыв!
В документации сказано, что файлы должны быть в библиотеках, которые используют определённые API. Соответственно, если API не используются - файл не нужен.
При сборке проекта файлы из библиотек собираются в один общий файл. Таким образом не важно, где лежат файлы.
Если приложение уже в сторе, надёжнее всего ориентироваться на письмо Apple. Ещё могу добавить, что файл обязательно нужен, если используются библиотеки, перечисленные здесь. Ну, и, дополнительно, можно прогнать свой проект скриптом, на который я ссылался в статье. Он подсветит классы, которые используют api, попадащие под privacy.
aLeXv17
Спасибо за ответ!