Манифест конфиденциальности Apple

Apple имеет политику конфиденциальности для приложений, предназначенных для iOS в App Store. Приложению требуется включить манифест конфиденциальности в пакет приложений, который перечисляет типы данных приложения .NET MAUI или любые сторонние пакеты SDK и пакеты, а также причины использования api любой требуемой причины. Если вы используете API-интерфейсы необходимых причин или сторонние пакеты SDK, не объявлены в манифесте конфиденциальности, ваше приложение может быть отклонено в App Store. Дополнительные сведения о манифестах конфиденциальности см. в файлах манифеста конфиденциальности в developer.apple.com.

В зависимости от того, используете ли вы .NET MAUI для разработки приложения или предоставления пакетов привязки для использования с приложениями .NET MAUI, требование предоставления манифеста конфиденциальности может отличаться.

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

Для всех приложений .NET MAUI, предназначенных для устройств под управлением iOS или iPadOS, требуется манифест конфиденциальности в пакете приложений. Дополнительные сведения см. в разделе "Добавление необходимых записей в манифест конфиденциальности".

Вам также потребуется просмотреть собственный код, любой машинный код и методы сбора и отслеживания данных, а также обновить манифест конфиденциальности соответствующим образом:

  • Если ваше приложение или пакет SDK собирает данные о пользователе, использующим приложение, необходимо описать использование данных в манифесте конфиденциальности. Дополнительные сведения см. в описании использования данных в манифестах конфиденциальности в developer.apple.com.
  • Если приложение или пакет SDK включает API .NET, которые вызывают API-интерфейсы необходимых причин Apple, необходимо оценить использование каждого из этих API и объявить причины их использования. Дополнительные сведения об api-интерфейсах необходимых причин см. в разделе "Описание использования API требуемой причины" на developer.apple.com.

Примечание.

Если ваше приложение включает какие-либо сторонние пакеты SDK или пакеты, эти сторонние компоненты должны включать собственные манифесты конфиденциальности отдельно.

Дополнительные сведения о создании манифеста конфиденциальности см. в статье "Создание манифеста конфиденциальности".

Внимание

Приведенные выше рекомендации предоставляются для удобства. Важно ознакомиться с документацией Apple по файлам манифеста конфиденциальности перед созданием манифеста конфиденциальности для вашего проекта.

Манифест конфиденциальности для проектов привязки

Проекты привязки делятся на две категории: статические привязки платформы и динамические привязки платформы. Манифест конфиденциальности должен быть включен в платформу, помещая его в пакет платформы. При правильном размещении проекта привязки он автоматически добавляется в пакет приложений, чтобы разработчики приложений не должны предоставлять причины использования API платформы. Дополнительные сведения см. в разделе "Размещение содержимого в пакете".

Для динамической платформы платформа добавляется в пакет приложений. Манифест политики конфиденциальности добавляется в расположение, в котором App Store ожидает, что он будет, и нет ничего для разработчика приложения.

В настоящее время при привязке статической платформы разработчикам приложений потребуется вручную объединить манифест конфиденциальности, включенный в статическую платформу, в манифест конфиденциальности приложения. Это связано с тем, как статические библиотеки связаны с основным двоичным файлом приложения, удаляя потребность в платформе.

Создание манифеста конфиденциальности

Чтобы добавить манифест конфиденциальности в проект приложения .NET MAUI, добавьте новый XML-файл с именем PrivacyInfo.xcprivacy в папку Platform/iOS проекта приложения. Убедитесь, что файл PrivacyInfo.xcprivacy не имеет расширения .xml . Затем добавьте следующий XML-код в файл:

<?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/>
</plist>

Затем измените файл проекта приложения .NET MAUI (*.csproj) и добавьте следующий элемент сборки для iOS в нижней части корневого <Project> элемента:

<ItemGroup Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'ios'">
    <BundleResource Include="Platforms\iOS\PrivacyInfo.xcprivacy" LogicalName="PrivacyInfo.xcprivacy" />
</ItemGroup>

Это гарантирует, что манифест конфиденциальности упаковается в приложение iOS в корне пакета.

Добавление необходимых записей в манифест конфиденциальности

Для всех приложений .NET MAUI, предназначенных для устройств под управлением iOS или iPadOS, требуется манифест конфиденциальности в пакете приложений. Это связано с средой выполнения .NET и библиотекой базовых классов (BCL) с использованием api-интерфейсов, которые не удаляются независимо от режима компоновщика. Три категории API и связанные с ними причины, которые должны находиться в манифесте конфиденциальности в приложении .NET MAUI, показаны в следующей таблице:

Категория API Причина Установить связь
NSPrivacyAccessedAPICategoryFileTimestamp C617.1 API метки времени файла
NSPrivacyAccessedAPICategorySystemBootTime 35F9.1 API времени загрузки системы
NSPrivacyAccessedAPICategoryDiskSpace E174.1 API пространства на диске

Чтобы добавить эти записи в манифест конфиденциальности, откройте файл PrivacyInfo.xcprivacy в текстовом редакторе и добавьте NSPrivacyAccessAPITypes ключ, где будет добавлена каждая требуемая категория API причин:

<?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>NSPrivacyAccessedAPITypes</key>
    <array>
    </array>
</dict>
</plist>

Затем добавьте категорию NSPrivacyAccessedAPICategoryFileTimestamp с причинойC617.1, NSPrivacyAccessedAPICategorySystemBootTime категорией с причиной и NSPrivacyAccessedAPICategoryDiskSpace категорией с причиной35F9.1E174.1, в NSPrivacyAccessedAPITypes массив в манифесте конфиденциальности:

<?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>NSPrivacyAccessedAPITypes</key>
    <array>
        <dict>
            <key>NSPrivacyAccessedAPIType</key>
            <string>NSPrivacyAccessedAPICategoryFileTimestamp</string>
            <key>NSPrivacyAccessedAPITypeReasons</key>
            <array>
                <string>C617.1</string>
            </array>
        </dict>
        <dict>
            <key>NSPrivacyAccessedAPIType</key>
            <string>NSPrivacyAccessedAPICategorySystemBootTime</string>
            <key>NSPrivacyAccessedAPITypeReasons</key>
            <array>
                <string>35F9.1</string>
            </array>
        </dict>
        <dict>
            <key>NSPrivacyAccessedAPIType</key>
            <string>NSPrivacyAccessedAPICategoryDiskSpace</string>
            <key>NSPrivacyAccessedAPITypeReasons</key>
            <array>
                <string>E174.1</string>
            </array>
        </dict>       
    </array>
</dict>
</plist>

Эти записи являются минимальными, необходимыми для вашего приложения. Если вы используете любой из необходимых api-интерфейсов причин таким образом, который не охватывается указанными кодами причин, вам потребуется добавить дополнительные коды причин для поддержки использования API. Дополнительные сведения об использовании API в среде выполнения .NET, библиотеке базовых классов .NET (BCL), .NET для iOS и .NET MAUI, которые могут вызвать дополнительные коды причин, см . в разделе "См. также ".

Если приложение .NET MAUI использует API параметров или используете NSUserDefaults API напрямую, необходимо включить причины использования в манифест конфиденциальности. Используйте строку NSPrivacyAccessedAPICategoryUserDefaults в качестве значения ключа NSPrivacyAccessedAPIType в NSPrivacyAccessedAPITypes словаре. Например, если приложение или пакет SDK напрямую или косвенно использует NSUserDefaults API с помощью API настроек .NET MAUI, файл PrivacyInfo.xcprivacy должен содержать дополнительный dict элемент в NSPrivacyAccessedAPITypes массиве ключей:

<?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>NSPrivacyAccessedAPITypes</key>
    <array>
        <dict>
            <key>NSPrivacyAccessedAPIType</key>
            <string>NSPrivacyAccessedAPICategoryFileTimestamp</string>
            <key>NSPrivacyAccessedAPITypeReasons</key>
            <array>
                <string>C617.1</string>
            </array>
        </dict>
        <dict>
            <key>NSPrivacyAccessedAPIType</key>
            <string>NSPrivacyAccessedAPICategorySystemBootTime</string>
            <key>NSPrivacyAccessedAPITypeReasons</key>
            <array>
                <string>35F9.1</string>
            </array>
        </dict>
        <dict>
            <key>NSPrivacyAccessedAPIType</key>
            <string>NSPrivacyAccessedAPICategoryDiskSpace</string>
            <key>NSPrivacyAccessedAPITypeReasons</key>
            <array>
                <string>E174.1</string>
            </array>
        </dict>
        <dict>
            <key>NSPrivacyAccessedAPIType</key>
            <string>NSPrivacyAccessedAPICategoryUserDefaults</string>
            <key>NSPrivacyAccessedAPITypeReasons</key>
            <array>
                <string>CA92.1</string>
            </array>
        </dict>
    </array>
</dict>
</plist>

Вам потребуется предоставить один или несколько кодов причин из API по умолчанию пользователей в developer.apple.com. Добавьте один или несколько приведенных ниже кодов причин, чтобы указать правильное использование:

  • CA92.1 — для доступа пользователей по умолчанию только к приложению.
  • 1C8F.1 — для доступа пользователей по умолчанию к приложениям, расширениям приложений и клипам приложений, которые являются членами одной группы приложений.
  • C56D.1 — для доступа пользователей по умолчанию из пакета SDK.
  • AC6B.1 — чтобы получить доступ к пользователю по умолчанию для чтения ключа com.apple.configuration.managed или com.apple.feedback.managed.

Внимание

При изменении кода в приложении может потребоваться обновить файл PrivacyInfo.xcprivacy. Это включает добавление пакета NuGet или проекта привязки к приложению, который вызывает любой из api-интерфейсов, необходимых для Apple.

См. также

Используйте следующие ссылки, чтобы узнать больше о необходимых причинах использования API в .NET MAUI, .NET для iOS и среде выполнения .NET и BCL: