Los privacy manifests de Apple son obligatorios para subir apps a la App Store: cada app necesita un PrivacyInfo.xcprivacy que describa la recolección de datos, dominios de tracking y cualquier API con motivos requeridos tus llamadas de code. SDKs de terceros en la lista requerida de Apple deben incluir sus propios manifiestos (y firmas si se distribuyen como binarios). Esta guía se centra en Cumplimiento para 2026 y resolución de problemas para Capacitor apps de iOS: qué declarar y cómo solucionarlo ITMS-91053 y ITMS-91061, y cómo validarlo antes de enviar.
Qué cubre un manifiesto de privacidad
Un manifiesto de privacidad es un property list incluido en tu app o SDK. Xcode agrega cada manifiesto al hacer el archive en un único reporte de privacidad.
| Clave | Propósito |
|---|---|
NSPrivacyTracking |
Si tu app o SDK usa datos para rastreo según la definición de Apple |
NSPrivacyTrackingDomains |
Dominios involucrados en el rastreo |
NSPrivacyCollectedDataTypes |
Tipos de datos recolectados y su uso |
NSPrivacyAccessedAPITypes |
Las APIs de motivos requeridos que tu propia code usa, con códigos de motivo aprobados |
Resumen de Apple: Añadir un privacy manifest a tu app o SDK de terceros.
Eres responsable de todo code en el binario, incluidos los SDKs embebidos. Tu manifest debe describir solo las prácticas de tu app. No pegues las prácticas de datos de otro SDK en tu archivo.
Categorías de motivos requeridos API
Desde el 1 de mayo de 2024, App Store Connect rechaza las subidas si tu app usa un API listado sin un motivo aprobado en NSPrivacyAccessedAPITypes. Apple documenta las API y los motivos aprobados en Cómo describir el uso de motivos requeridos API.
A partir de la TN3183, los categoría valores son:
NSPrivacyAccessedAPIType valor |
Disparador típico en apps híbridas |
|---|---|
NSPrivacyAccessedAPICategoryUserDefaults |
Ajustes, estado de plugins, persistencia mínima |
NSPrivacyAccessedAPICategoryFileTimestamp |
Metadatos de archivos, caches, bundles de actualización |
NSPrivacyAccessedAPICategoryDiskSpace |
Comprobación de espacio libre antes de descargas |
NSPrivacyAccessedAPICategorySystemBootTime |
Tiempo transcurrido, timers o timestamps absolutos |
NSPrivacyAccessedAPICategoryActiveKeyboards |
Extensión de teclado o detección de entrada |
Por cada categoría que uses, añade un diccionario con NSPrivacyAccessedAPIType y NSPrivacyAccessedAPITypeReasons. Elige solo los códigos de motivo que Apple lista para esa categoría. Los códigos incorrectos causan fallos en la revisión.
Fragmento de ejemplo (ajusta categorías y códigos según tu app tras inspeccionar el reporte de privacidad):
<key>NSPrivacyAccessedAPITypes</key>
<array>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategoryUserDefaults</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>CA92.1</string>
</array>
</dict>
</array>
Capacitor aparece en la propia página de Apple requisitos de SDK de terceros así que el framework incluye un manifiesto para el uso de API de Capacitor. Aun así, necesitas un manifiesto a nivel de app para tus capas nativas y de JavaScript, plugins y cualquier API no cubierta por las dependencias.
ITMS-91053: falta la declaración de API
ITMS-91053 significa que App Store Connect detectó un motivo de API requerido en tu build sin una entrada correspondiente en un manifiesto de privacidad unificado.
Soluciónalo:
- Lee el correo de rechazo o el log de upload. Ahí se indica el API categoría (por ejemplo
NSPrivacyAccessedAPICategoryDiskSpace). - Abre el reporte de privacidad del archive en Xcode (Producto > Archivo, luego Generar Privacy Report del archive) y comprueba si la brecha está en tu app target o en una dependencia.
- Si el API está en tu code o en un plugin propio, añade la categoría y el motivo aprobado a
ios/App/PrivacyInfo.xcprivacy. - Si el API proviene de una dependencia, actualiza el pod o el paquete SPM a una versión con manifest, o parchea el plugin y declara solo lo que tu fork realmente llama.
- Vuelve a archivar y confirma que la categoría aparezca en el reporte antes de subirlo de nuevo.
No declares categorías que no utilices. El análisis estático de Apple se basa en los símbolos del binario.
ITMS-91061: falta el manifiesto de privacidad de terceros
ITMS-91061 significa un SDK con impacto en la privacidad en tu app bundle no tiene un PrivacyInfo.xcprivacy. Apple indica que al lanzar una nueva app o una actualización que añada un SDK listado, ese SDK debe incluir un manifiesto; los SDKs binarios también requieren una firma del proveedor de SDK.
Soluciónalo:
- Copia la ruta del framework desde el email (por ejemplo,
Frameworks/FirebaseCore.framework/FirebaseCore). - Identifica el paquete CocoaPods, SPM o binario vendored.
- Actualiza a una versión de vendor que incluya
PrivacyInfo.xcprivacyen la raíz del framework. - Limpia, reconstruye y verifica el archivo dentro de
.xcarchiveantes de subirlo.
No muevas la colección de SDK o las declaraciones de API al manifiesto de tu app. Apple advierte explícitamente que el manifiesto debe describir solo la app. Si el SDK no tiene mantenimiento, reemplázalo o usa un build vendored compatible.
Los SDK listados incluyen stacks móviles comunes (Firebase, Flutter, Capacitor, shared_preferences_iosy otros). Revisa la lista actual en el sitio de Apple antes de cada release.
Manifiestos y firmas de SDK de terceros
Al actualizar una dependencia, Xcode valida que los frameworks binarios estén firmados por el mismo desarrollador que las versiones anteriores. Esto protege la cadena de suministro cuando cambian los manifiestos.
Flujo de trabajo práctico:
- Después de
pod installo resolver SPM, buscaios/enPrivacyInfo.xcprivacyarchivos. - Archiva y usa Generar reporte de privacidad para ver el panorama completo.
- Compara el reporte con tus respuestas del cuestionario de privacidad de la App Store.
Para las herramientas de live update, declara las APIs de razones requeridas que tu updater use realmente (por ejemplo, espacio en disco, timestamps de archivos o user defaults). El acceso a la red no es una categoría de API por razón requerida. Si el updater recolecta datos personales, decláralos en tus etiquetas de privacidad y respuestas de la App Store; descargar una actualización vía HTTPS por sí solo no crea una nueva categoría de divulgación. Mantén cumplimiento de Capgo live update al documentar el comportamiento de OTA.
Añadir PrivacyInfo.xcprivacy en un proyecto iOS de Capacitor
- Sincroniza el proyecto nativo:
bunx cap sync ios. - Abre el workspace de Xcode en
ios/App. - Archivo > Nuevo > Archivo, elige App Privacy (o añade uno vacío)
PrivacyInfo.xcprivacyplist vacío). - Guarda el archivo en
ios/App(la misma carpeta queAppDelegateestá bien). - En el objetivo Fases de compilación > Copy Bundle Resources, confirma
PrivacyInfo.xcprivacyestá listado. - Completa los tipos de datos rastreados o recolectados y las APIs de motivos requeridos según tu app y plugins.
- Archiva, genera el reporte de privacidad y corrige las categorías faltantes antes de subirlo a App Store Connect.
Si editas el plist como XML en el disco, vuelve a abrir Xcode para que la target membership se mantenga correcta.
Cada app o target SDK mantiene su propio PrivacyInfo.xcprivacyAl archivar, Xcode agrega esos manifiestos en un único informe de privacidad. No necesitas fusionar manualmente los plists de las dependencias en el archivo de tu app.
Para un plugin Capacitor personalizado se distribuye como su propio framework de iOS, añade PrivacyInfo.xcprivacy bajo el de ese plugin ios/Plugin/ carpeta (o equivalente) y lístalo en el target del plugin Copiar recursos del bundle, no solo en el target de la app.
Cuando NSPrivacyTracking es true o integras SDKs de anuncios o analytics, alinea el manifest con las etiquetas de privacidad de la App Store y muestra el prompt de App Tracking Transparency cuando iOS lo requiera. @capgo/capacitor-app-tracking-transparency cubre el flujo de ATT para apps Capacitor.
Checklist de validación antes de enviar
- El target de la app incluye
PrivacyInfo.xcprivacyen Copiar recursos del bundle. - Cada categoría de motivo requerida en el rechazo o reporte tiene códigos de motivo aprobados.
- Cada SDK de terceros listado en el build incluye su propio manifiesto en la ruta esperada.
- El reporte de privacidad coincide con tu conocimiento sobre los SDK de analytics, ads y autenticación.
- Las etiquetas de privacidad de la App Store coinciden con el reporte consolidado.
FAQ
¿Los plugins de Capacitor necesitan su propio manifiesto de privacidad?
Si un plugin se distribuye como código fuente en tu repo, su uso de API es parte del binario de tu app. Declara las APIs que el plugin llama en el app manifiesto, o contribuye con un manifiesto dentro del target del plugin si se distribuye como un framework separado. Los pods binarios deben seguir las reglas de SDK de terceros de Apple.
¿Puedo solucionar el error ITMS-91061 editando solo el PrivacyInfo.xcprivacy de mi app?
No. El SDK debe incluir el manifiesto. Tu archivo solo debe documentar las prácticas de tu app.
¿Dónde se documentan las fechas de las políticas de Apple?
APIs con motivos requeridos: obligatorias desde 1 de mayo de 2024. Las reglas de firma y manifiesto de terceros para los SDK listados se describen en Requisitos de SDK de terceros.
Continuar desde Privacy Manifest for iOS Apps
Si estás usando Manifest de privacidad para apps de iOS para planificar la seguridad y el cumplimiento, conéctalo con Cifrado para los detalles de implementación en Encryption, Cumplimiento para el detalle de implementación en Compliance, Escáner de seguridad de Capgo para el flujo de trabajo del producto en Capgo Security Scanner, Seguridad de Capgo para el flujo de trabajo del producto en Capgo Security, y Centro de confianza de Capgo para el flujo de trabajo del producto en Capgo Trust Center.