Spec-Zone.ru › Kotlin 2

Манифест конфиденциальности для приложений iOS

Если ваше приложение предназначено для Apple App Store и использует API, для использования которых требуется указать причину, App Store Connect может предупредить, что в приложении отсутствует корректный манифест конфиденциальности:

Required reasons warning

Это может коснуться любого приложения в экосистеме Apple — нативного или мультиплатформенного. Возможно, приложение использует API, для которого требуется указать причину, через стороннюю библиотеку или SDK, и это может быть неочевидно. Kotlin Multiplatform может быть одним из фреймворков, использующих API, о которых вы не знаете.

На этой странице вы найдёте подробное описание проблемы и рекомендации по её решению.

На этой странице отражено текущее понимание проблемы командой Kotlin. По мере получения новых данных и сведений о принимаемых подходах и обходных решениях мы будем обновлять страницу.

В чём проблема

Требования 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.

16 мая 2025 г.
Публикация библиотеки в npm — руководствоРекомендуемые IDE и редакторы кода

© 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API