Manifiesto de privacidad de Apple
Apple tiene una directiva de privacidad para las aplicaciones destinadas a iOS en la App Store. Requiere que la aplicación incluya un manifiesto de privacidad en la agrupación de aplicaciones, que muestre los tipos de datos de la aplicación .NET MAUI o los SDK y paquetes de terceros que recopilen, y las razones para usar las API por cualquier motivo necesario. Si el uso de las API necesarias o los SDK de terceros no se declara en el manifiesto de privacidad, la aplicación podría ser rechazada por la App Store. Para obtener más información sobre los manifiestos de privacidad, consulte Archivos de manifiesto de privacidad en developer.apple.com.
Dependiendo de si usa .NET MAUI para desarrollar una aplicación o proporcionar paquetes de enlace para usarlos con aplicaciones .NET MAUI el requisito de proporcionar un manifiesto de privacidad puede diferir.
Manifiesto de privacidad para aplicaciones .NET MAUI
Todas las aplicaciones .NET MAUI que tienen como destino los dispositivos que ejecutan iOS o iPadOS requieren un manifiesto de privacidad en el lote de aplicaciones. Para obtener más información, consulte Adición de entradas necesarias al manifiesto de privacidad.
También tendrá que revisar su propio código, cualquier código nativo y procedimientos de recopilación y seguimiento de datos y actualizar el manifiesto de privacidad en consecuencia:
- Si la aplicación o el SDK recopilan datos sobre la persona que usa la aplicación, deberá describir los datos que se usan en un manifiesto de privacidad. Para obtener información, consulte Descripción del uso de datos en manifiestos de privacidad en developer.apple.com.
- Si la aplicación o el SDK incluyen API de .NET que llaman a las API de motivo necesarias de Apple, debe evaluar el uso de cada una de estas API y declarar las razones para usarlas. Para obtener más información sobre los motivos necesarios, consulte Descripción del uso de la API de motivo necesaria en developer.apple.com.
Nota:
Si la aplicación incluye SDK o paquetes de terceros, estos componentes de terceros deben incluir sus propios manifiestos de privacidad por separado.
Se agrega automáticamente un manifiesto de privacidad a los nuevos proyectos de aplicación .NET MAUI que se crean mediante .NET CLI o Visual Studio. Para obtener información sobre cómo agregar un manifiesto de privacidad a una aplicación .NET MAUI existente, consulta Incorporación de un manifiesto de privacidad a una aplicación existente.
Importante
Las instrucciones anteriores se proporcionan para su comodidad. Es importante que revise la documentación de Apple sobre los archivos de manifiesto de privacidad antes de crear un manifiesto de privacidad para el proyecto.
Manifiesto de privacidad para proyectos de enlace
Los proyectos de enlace se dividen en dos categorías: enlaces de marcos estáticos y enlaces de marcos dinámicos. Debe incluirse un manifiesto de privacidad con el marco colocándolo en la agrupación de marcos. Cuando se coloque correctamente, el proyecto de enlace lo agregará automáticamente al lote de aplicaciones para que los desarrolladores de aplicaciones no necesiten proporcionar razones para el uso de la API del marco. Para obtener más información, consulte Colocación de contenido en una agrupación.
En el caso de los marcos dinámicos, el marco se agrega al lote de aplicaciones. El manifiesto de directiva de privacidad se agrega a la ubicación que App Store espera y el desarrollador de aplicaciones no necesita hacer nada.
Actualmente, al enlazar un marco estático, se pedirá a los desarrolladores de aplicaciones que combinen manualmente el manifiesto de privacidad que viene incluido con el marco estático en el manifiesto de privacidad de la aplicación. Esto se debe a la forma en la que las bibliotecas estáticas están vinculadas al elemento binario principal de la aplicación, lo que elimina la necesidad del marco.
Incorporación de un manifiesto de privacidad a una aplicación existente
Para agregar un manifiesto de privacidad a un proyecto de aplicación .NET MAUI existente, agrega un nuevo archivo XML denominado PrivacyInfo.xcprivacy a la carpeta Platforms/iOS del proyecto de tu aplicación. Asegúrese de que el archivo PrivacyInfo.xcprivacy no tenga una extensión .xml. A continuación, agregue el siguiente código XML al archivo:
<?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>
A continuación, edite el archivo de proyecto de aplicación .NET MAUI (*.csproj) y agregue el siguiente elemento de compilación para iOS en la parte inferior del elemento raíz <Project>
:
<ItemGroup Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'ios'">
<BundleResource Include="Platforms\iOS\PrivacyInfo.xcprivacy" LogicalName="PrivacyInfo.xcprivacy" />
</ItemGroup>
Esto garantizará que el manifiesto de privacidad se empaqueta en la aplicación de iOS en la raíz de la agrupación.
Adición de entradas necesarias al manifiesto de privacidad
Todas las aplicaciones .NET MAUI que tienen como destino los dispositivos que ejecutan iOS o iPadOS requieren un manifiesto de privacidad en el lote de aplicaciones. Esto se debe al entorno de ejecución de .NET y a la biblioteca de clases base (BCL) que usan las API de motivo necesarias que no se quitan independientemente del modo del enlazador. Las tres categorías de API y sus razones asociadas que deben estar en el manifiesto de privacidad en una aplicación .NET MAUI se muestran en la tabla siguiente:
Categoría de API | Motivo | Vínculo |
---|---|---|
NSPrivacyAccessedAPICategoryFileTimestamp |
C617.1 |
API de marca de tiempo de archivo |
NSPrivacyAccessedAPICategorySystemBootTime |
35F9.1 |
API de tiempo de arranque del sistema |
NSPrivacyAccessedAPICategoryDiskSpace |
E174.1 |
API de espacio en disco |
Si has agregado manualmente un manifiesto de privacidad a una aplicación .NET MAUI existente, tendrás que agregarle estas entradas. Para ello, abre el archivo PrivacyInfo.xcprivacy en un editor de texto y agrega la clave NSPrivacyAccessAPITypes
, donde se agregará posteriormente cada uso de categoría de API de motivo necesario:
<?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>
A continuación, agregue la categoría NSPrivacyAccessedAPICategoryFileTimestamp
con motivo C617.1
, la categoría NSPrivacyAccessedAPICategorySystemBootTime
con motivo 35F9.1
y la categoría NSPrivacyAccessedAPICategoryDiskSpace
con motivo E174.1
, a la matriz NSPrivacyAccessedAPITypes
en el manifiesto de privacidad:
<?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>
Estas entradas son el mínimo que necesitarás para la aplicación. Si usas cualquiera de los motivos necesarios para las API de una manera que no la cubran los códigos de motivo proporcionados, deberás agregar códigos de motivo adicionales para admitir el uso de la API. Para obtener más información sobre el uso de API en el runtime de .NET, la biblioteca de clases base de .NET (BCL), .NET para iOS y .NET MAUI que podrían hacer que necesites códigos de motivo adicionales, consulta los vínculos de la sección Consulta también.
Si la aplicación de .NET MAUI usa Preferences API o usa directamente NSUserDefaults API, debes incluir los motivos de uso en el manifiesto de privacidad. Use la cadena NSPrivacyAccessedAPICategoryUserDefaults
como valor para la clave NSPrivacyAccessedAPIType
del diccionario NSPrivacyAccessedAPITypes
. Por ejemplo, si la aplicación o el SDK usa directamente o indirectamente NSUserDefaults API, mediante Preferences API de .NET MAUI, el archivo PrivacyInfo.xcprivacy debe contener un elemento dict
adicional en la matriz de la clave de 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>
Deberás proporcionar uno o varios códigos de motivo de API predeterminadas del usuario en developer.apple.com. Agrega uno o varios de los códigos de motivo siguientes para indicar el uso correcto:
CA92.1
: para acceder a los valores predeterminados del usuario solo en la aplicación.1C8F.1
: para acceder a los valores predeterminados del usuario desde aplicaciones, extensiones de aplicaciones y Clips de aplicación que son miembros del mismo grupo de aplicaciones.C56D.1
: para acceder a los valores predeterminados del usuario desde un SDK.AC6B.1
: para acceder a los valores predeterminados del usuario a fin de leer la clave com.apple.configuration.managed o com.apple.feedback.managed.
Importante
Es posible que sea necesario actualizar el archivo PrivacyInfo.xcprivacy de una aplicación si modifica el código de la aplicación. Esto incluye agregar un paquete NuGet o un proyecto de enlace a la aplicación que llama a cualquiera de las API de motivo necesarias de Apple.
Consulte también
Usa los vínculos siguientes para obtener más información sobre los motivos necesarios a fin de usar la API en .NET MAUI, .NET para iOS y el runtime de .NET y BCL: