Как дела с приватностью у Apple в 2024? [Инструкция]
Privacy Manifest в iOS-приложениях для Apple
C мая 2024-года отправляемые в AppStore проекты должны содержать "Privacy Manifest". Это выглядит как новые хлопоты для разработчиков, но большую часть подобной информации требовалось предоставлять и раньше. Часть этой информации в виде карточек с пиктограммами отображается в секции App Privacy на странице приложения.
Только раньше заполнять эти данные должен был тот, кто публикует приложение, например, менеджер, владелец аккаунта в интерфейсе AppStoreConnect. Перенос этого бремени отчётности на разработчика логичен в том смысле, что ему, конечно, виднее, какие функции, имеющие отношение к приватности, задействованы и для чего, как осуществляется трекинг.
Сам манифест – это очередной plist-файл (c расширением .xcprivacy), который надо добавить в проект, указав для нового файла тип "App Privacy".
Подход с Privacy Manifest файлами имеет плюсы. Если используемые библиотеки уже содержат манифест, то всё ,что они задекларируют по части privacy, подтянется автоматически. Теоретически, вам теперь не нужно сильно вникать в privacy-логику сторонних SDKs, а нужно дописать только "своё". Все манифесты объединяются в один при сборке архива. Это здорово облегчает задачу, но на практике кое-что придётся перепроверить. Сценарии использования библиотек очень разные, поэтому логично, что если манифест с библиотекой и поставляется, то содержит самый минимум, который придётся дополнить в манифесте приложения.
Сбор и использование данных - Privacy Nutrition Label Types
Apple позволяет с информированного согласия пользователя: собирать данные о нём для разрешённых целей.
Разобраться с этим разделом поможет видео "Create your Privacy Nutrition Label", представленное ещё на WWDC22. Можно пройтись по полному списку типов собираемых данных Collected Data Type, создавая и заполняя item для каждого используемого типа. Нужно помнить, что целей Collection Purposes у одного типа данных может быть несколько. Собираемые данные могут быть связаны с отслеживанием.
Отслеживание
С разрешения пользователя Apple допускает отслеживание. Пользователь имеет возможность попросить отслеживание отключить. Подробнее об истории вопроса можно почитать в статье "What is IDFA and why is this iOS update important?".
Исторически отслеживание осуществлялось с помощью IDFA – идентификатор для рекламодателя. В новых версиях iOS если не запросить и не получить согласие пользователя на отслеживание, то IDFA будет возвращать всегда нули. Отслеживание может осуществляться и другими способами: путем передачи данных на домены, например.
Если приложение участвует в отслеживании, то требуется добавить в манифест ключ Privacy Tracking Enabled со значением true. Далее в ключе Privacy Tracking Domains нужно перечислить все домены, которые используются для отслеживания. Privacy Tracking Domains это простая возможность для разработчика оградить пользователя от отслеживания, путём перечисления и своих и сторонних трекеров.
В видео с WWDC23 "Get started with privacy manifests" сказано:
В случаях, когда пользователь не предоставил разрешения на отслеживание, iOS17 автоматически блокирует соединения с доменами, которые были указаны в любом манифесте конфиденциальности, включенном в ваше приложение.
Apple рекомендует разделять логику на необходимую для базового функционирования и для отслеживания по доменам. Разработчику следует убедиться, что основная функциональность не страдает, если вдруг пользователь не разрешал трекинг и трафик на трекинговые домены заблокирован. Нужно заметить, что термин "отслеживание" в данном контексте трактуется довольно узко. Судя по разъясняющему видео с WWDC2022 "Explore App Tracking Transparency" это скорее комбинация накопления данных и их обогащения или обмена с другими источниками. Если вы ни с кем не делитесь данными пользователей, то считается, что отслеживание отсутствует и можно бы внести в манифест Privacy Tracking Enabled со значением false , а список доменов оставить пустым.
Проблема в том, что даже если вы сами ничего не отслеживаете, это с большой вероятностью делают библиотеки или SDK, которые вы используете в проекте.
Некоторые из них поставляются вместе со своими privacy manifests. Но эти манифесты минимальны и могут не покрывать всех сценариев использования библиотек в конкретном приложении.
Другие просто по - умолчанию используют отслеживание. Поэтому какие-то трекинговые домены, возможно, придётся самостоятельно выяснить и вручную внести в манифест приложения.
Как узнать используемые домены
Видео "Create your Privacy Nutrition Label" с WWDC22 предлагает обратиться к инструменту App Privacy Report, доступному на любом iOS устройстве начиная с версии 15.2. На русском он называется "Отчет о конфиденциальности приложений", найти его можно в настройках. "Отчет о конфиденциальности приложений" начинает собирать информацию только после того, как вы его включите, поэтому может пройти некоторое время, прежде чем появятся подробности. Среди прочего в секции "Сетевая активность" будут перечислены все домены, к которым обращается приложение.
Это общедоступный способ. В "Отчёте", кстати, неплохо видно как программы используют устройство в то время как вы используете программы. Разработчики для составления списка задействованных доменов скорее всего выберут один из инструментов профилирования или анализаторов сетевого трафика.
В Xcode есть подходящий профайлер Product → Profile → Network. – для анализа сетевой активности собственного приложения, наверное, самый доступный инструмент.
"Отчет о конфиденциальности приложений" имеет то преимущество, что покажет все домены за длительный период использования, а не единичную отладочную сессию, во время которой устройство привязано к среде разработки. Например, в приложении Rentel есть вставки web-контента для целей предоставления справки. Соответственно, идёт, обращение к доменам веб-метрик. Также есть домены, на которые отправляется информация об ошибках приложения.
Затрагивающие приватность API
Privacy Accessed API Types
Apple допускает открытое отслеживание с согласия пользователя, но выступает против скрытой слежки, неявной идентификации – fingerprinting.
Использование сигналов, уникальных характеристик устройства для идентификации устройства или пользователя запрещено.
Использование сигналов, уникальных характеристик устройства для идентификации
устройства или пользователя запрещено.
Поэтому использование части системного API потенциально пригодного для сбора цифрового отпечатка – Required reason APIs – требуется обосновать.
Эти API сгруппированы в категории. Для каждой категории существует список разрешенных причин для доступа к этим API, основанный на сценариях их использования.
Например, к Required reason APIs относится NSFileSystemFreeSize, определяющий свободное место в файловой системе. Одна из одобренных причин – использование этого API для проверки наличия достаточного места на диске перед записью файлов. Список Required reason APIs и допустимых причин опубликован в документации: "Describing use of required reason API". Для многих разработчиков стало сюрпризом, что использование реестра UserDefaults теперь тоже нужно декларировать.
Заключение
При заполнении манифеста достаточно пройтись по имеющимся ключам, выбирая те, которые используются в приложении и заполняя значения для каждого ключа из ограниченного ниспадающего списка. Использовать свои значения нельзя, это приведёт к ошибке при компиляции.
Манифест включает в себя следующие разделы (ключи верхнего уровня):
- Privacy Nutrition Label Types – данные, собираемые о пользователе и характер их использования
- Privacy Accessed API Types – privacy sensitive системное API и причины его использования
- Privacy Tracking Enabled – использование отслеживания (да/нет)
- Privacy Tracking Domains – список доменов, которые используются для отслеживания
✋🏻Будем благодарны вашей обратной связи:
Telegram - канал Rentel: @Rentelbusiness