Манифест конфиденциальности для приложений iOS
Если ваше приложение предназначено для Apple App Store и использует API, для использования которых требуется указать причину, App Store Connect может предупредить, что в приложении отсутствует корректный манифест конфиденциальности:
Это может коснуться любого приложения в экосистеме Apple — нативного или мультиплатформенного. Возможно, приложение использует API, для которого требуется указать причину, через стороннюю библиотеку или SDK, и это может быть неочевидно. Kotlin Multiplatform может быть одним из фреймворков, использующих API, о которых вы не знаете.
На этой странице вы найдёте подробное описание проблемы и рекомендации по её решению.
В чём проблема
Требования Apple к отправке приложений в App Store изменились весной 2024 года. App Store Connect больше не принимает приложения, в манифестах конфиденциальности которых не указана причина использования API, для которых требуется указать причину.
Это автоматическая проверка, а не ручная модерация: код вашего приложения анализируется, после чего вы получаете список проблем по электронной почте. В письме будет указана проблема «ITMS-91053: Missing API declaration» и перечислены все категории API, используемые в приложении и относящиеся к категории API, для использования которых требуется указать причину.
В идеале все используемые приложением SDK предоставляют собственный манифест конфиденциальности, и вам не о чем беспокоиться. Но если некоторые зависимости этого не делают, отправка приложения в App Store может быть отмечена как проблемная.
Как решить проблему
После попытки отправить приложение и получения от App Store подробного списка проблем вы можете создать манифест, следуя документации Apple:
Описание использования данных в манифестах конфиденциальности
Описание использования API, для которых требуется указать причину
В результате получится файл, представляющий собой набор словарей. Для каждого типа используемого API выберите одну или несколько причин его использования из предложенного списка. Xcode упрощает редактирование файлов .xcprivacy, предоставляя визуальное представление и раскрывающиеся списки допустимых значений для каждого поля.
Чтобы найти места использования API, для которых требуется указать причину, в зависимостях вашего фреймворка Kotlin, можно воспользоваться специальным инструментом, а чтобы добавить файл .xcprivacy к артефактам Kotlin — отдельным плагином.
Если новый манифест конфиденциальности не поможет выполнить требования App Store или вы не сможете разобраться, как пройти все шаги, свяжитесь с нами и опишите свой случай в этой задаче YouTrack.
Поиск мест использования API, для которых требуется указать причину
Код Kotlin в вашем приложении или одной из его зависимостей может обращаться к API, для которых требуется указать причину, из таких библиотек, как platform.posix, например fstat:
import platform.posix.fstat
fun useRequiredReasonAPI() {
fstat(...)
}
В некоторых случаях бывает сложно определить, какие зависимости используют API, для которого требуется указать причину. Чтобы помочь найти их, мы создали простой инструмент.
Чтобы воспользоваться им, выполните следующую команду в каталоге, где в проекте объявлен фреймворк Kotlin:
/usr/bin/python3 -c "$(curl -fsSL https://github.com/JetBrains/kotlin/raw/rrf_v0.0.1/libraries/tools/required-reason-finder/required_reason_finder.py)"
Вы также можете отдельно скачать этот скрипт, изучить его и запустить с помощью python3.
Добавление файла .xcprivacy в артефакты Kotlin
Если вам нужно включить файл PrivacyInfo.xcprivacy в артефакты Kotlin, используйте плагин apple-privacy-manifests:
plugins {
kotlin("multiplatform")
kotlin("apple-privacy-manifests") version "1.0.0"
}
kotlin {
privacyManifest {
embed(
privacyManifest = layout.projectDirectory.file("PrivacyInfo.xcprivacy").asFile,
)
}
}
Плагин скопирует файл манифеста конфиденциальности в соответствующее место в выходных данных.
Известные случаи использования
Compose Multiplatform
Использование Compose Multiplatform может привести к появлению в двоичном файле fstat, stat и mach_absolute_time. Хотя эти функции не используются для отслеживания или снятия цифрового отпечатка и данные не отправляются с устройства, Apple всё равно может отметить их как API, для которых не указаны необходимые причины.
Если вам необходимо указать причину использования stat и fstat, используйте 0A2A.1. Для mach_absolute_time используйте 35F9.1.
Чтобы следить за обновлениями об API, для которых требуется указать причину и которые используются в Compose Multiplatform, следите за этой задачей.
Среда выполнения Kotlin/Native версии 1.9.10 или более ранней
API mach_absolute_time используется аллокатором mimalloc в среде выполнения Kotlin/Native. Это был аллокатор по умолчанию в Kotlin 1.9.10 и более ранних версиях.
Рекомендуем обновиться до Kotlin 1.9.20 или более поздней версии. Если обновление невозможно, смените аллокатор памяти. Для этого задайте параметр компиляции -Xallocator=custom в скрипте сборки Gradle, чтобы использовать текущий аллокатор Kotlin, или -Xallocator=std — чтобы использовать системный аллокатор.
Дополнительную информацию см. в разделе Управление памятью в Kotlin/Native.
© 2010–2026 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/docs/multiplatform/multiplatform-privacy-manifest.html