Entitlements son derechos y permisos digitales que se asignan a una aplicación durante la fase de firma de código y determinan el acceso a funciones protegidas del sistema operativo Apple. A diferencia de los permisos de usuario, los Entitlements son verificados por el sistema al iniciar la aplicación y no pueden ser modificados por el usuario. Según la Documentación para Desarrolladores de Apple (2025), la configuración correcta de Entitlements es obligatoria para usar iCloud, notificaciones Push y App Groups. Entitlements son un elemento clave del modelo de seguridad de iOS y macOS.
Puntos Clave
Entitlements (traducido del inglés como “derechos”) son pares clave-valor incluidos en la firma de código de la aplicación durante la compilación que determinan a qué capacidades y datos del sistema puede acceder la aplicación. Los Entitlements han estado integrados en el modelo de seguridad de Apple desde la introducción del iOS SDK y son obligatorios para todas las aplicaciones distribuidas a través de la App Store.
El concepto de Entitlements difiere de los permisos tradicionales en Android. Mientras que los permisos de Android se solicitan al usuario en el momento del primer uso de una función, los Entitlements en iOS son verificados por el sistema al iniciar la aplicación basándose en la firma digital. El usuario no puede revocar ni cambiar un entitlement — este derecho se concede al desarrollador a través de App Store Connect y se incorpora en el perfil de aprovisionamiento.
Cada entitlement tiene un propósito y formato estrictamente definidos. Por ejemplo, com.apple.security.application-groups permite el acceso a un contenedor compartido para un conjunto de aplicaciones del mismo desarrollador, mientras que aps-environment habilita el soporte de notificaciones Push. Apple revisa manualmente las solicitudes de entitlements durante el proceso de App Review, lo que previene el abuso de derechos.
Los Entitlements se clasifican por propósito funcional en varias categorías. Servicios del Sistema — iCloud, Push Notifications, Siri. Seguridad y Datos — Keychain Access Groups, App Groups, Data Protection. Red y Comunicación — Multipath TCP, VPN, Hotspot Configuration. Capacidades de Hardware — Cámara, Micrófono, Bluetooth (a través de capabilities relacionadas).
Xcode agrupa entitlements relacionados en Capabilities — interruptores de alto nivel en la pestaña Signing & Capabilities. Habilitar una Capability añade automáticamente los entitlements necesarios al archivo .entitlements. Por ejemplo, habilitar la capability Push Notifications añade el entitlement aps-environment con un valor de development o production, mientras que habilitar iCloud añade un conjunto de entitlements para CloudKit y almacenamiento Key-Value.
Algunas capabilities requieren configuración adicional en el portal de Apple Developer. Por ejemplo, App Groups requiere registrar un identificador de grupo en el portal, después de lo cual estará disponible para seleccionar en Xcode. Para Push Notifications, se debe generar una clave o certificado APNs. Sin estos pasos previos, el entitlement no funcionará incluso con un archivo .entitlements correcto.
El entitlement com.apple.security.application-groups permite que varias aplicaciones del mismo desarrollador compartan un contenedor común en el sistema de archivos. Se utiliza para compartir datos entre la aplicación principal y las extensiones (Widget, Watch App, Share Extension). Todas las aplicaciones del mismo grupo pueden leer y escribir archivos en el directorio compartido /Library/Group Containers/.
Keychain Access Groups (clave keychain-access-groups) es otro entitlement importante que permite a las aplicaciones del mismo grupo compartir acceso a elementos de Keychain. Esto es crítico para implementar inicio de sesión único: el usuario inicia sesión en una aplicación y obtiene acceso automáticamente a la misma cuenta en otra aplicación sin volver a ingresar la contraseña.
La configuración de Entitlements se realiza en Xcode en la pestaña Signing & Capabilities en la configuración del target. El desarrollador selecciona las Capabilities requeridas de la lista, y Xcode crea o actualiza automáticamente el archivo .entitlements. Este archivo se almacena en el proyecto en formato XML con estructura plist y contiene todas las claves de entitlements para ese target.
<?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>com.apple.security.application-groups</key>
<array>
<string>group.com.example.shared</string>
</array>
<key>aps-environment</key>
<string>development</string>
<key>keychain-access-groups</key>
<array>
<string>$(AppIdentifierPrefix)com.example.keychain</string>
</array>
</dict>
</plist>
Al crear un archivo entitlement manualmente, es importante seguir el formato de claves y los prefijos. Los entitlements de Apple utilizan un estilo de dominio inverso (com.apple.*). Los entitlements personalizados para fines propios también son posibles, pero deben registrarse en el portal de desarrollador. Xcode proporciona autocompletado para todas las claves de entitlement estándar.
Para depurar Entitlements, use el comando codesign en la terminal de macOS. El comando codesign -d --entitlements :- <ruta_a_la_aplicación> muestra todos los entitlements con los que está firmada la aplicación. Esto es útil para diagnosticar problemas: si falta un entitlement en la salida, la aplicación no obtendrá acceso a la función correspondiente independientemente de la configuración de Xcode.
Aunque Xcode genera el archivo entitlement automáticamente al habilitar Capabilities, los desarrolladores experimentados a menudo lo crean o editan manualmente para ajustes finos. El archivo tiene la extensión .entitlements y formato plist (XML). Se pueden añadir claves de entitlement personalizadas que no están presentes en la interfaz de Xcode, o combinar entitlements de diferentes capabilities en un solo archivo.
Al editar manualmente, es importante asegurar la corrección sintáctica del XML. Un error en la estructura plist provocará que los entitlements no se apliquen durante la firma. Xcode verifica el archivo .entitlements en tiempo de compilación y muestra un error si el formato es incorrecto. Para proyectos complejos con múltiples targets y extensiones, se recomienda almacenar las claves de entitlement comunes en archivos separados e importarlas a través de Build Settings.
// cli: checking entitlements of an installed application
codesign -d --entitlements :- /Applications/Safari.app
// Example output contains a list of active entitlements
<dict>
<key>com.apple.security.ts.apple-wifi</key>
<true/>
<key>com.apple.security.network.client</key>
<true/>
</dict>
Los Entitlements juegan un papel clave en el modelo de seguridad de Apple. Dado que los entitlements son parte de la firma digital de la aplicación, su falsificación es imposible sin volver a firmar el código. Apple verifica los entitlements en múltiples niveles: durante la compilación, Xcode firma los entitlements junto con el archivo ejecutable; durante la instalación, el sistema verifica la integridad de la firma; al iniciar, vuelve a verificar los entitlements.
Un requisito de seguridad importante es el principio de mínimo entitlement. El desarrollador debe incluir solo aquellos entitlements que realmente se utilizan en la aplicación. Los entitlements innecesarios aumentan la superficie de ataque y pueden provocar el rechazo de la aplicación durante App Review. Apple verifica explícitamente que los entitlements coincidan con la funcionalidad de la aplicación.
Algunos entitlements se consideran sensibles y requieren aprobación adicional de Apple. Estos incluyen: com.apple.developer.healthkit (HealthKit), com.apple.developer.passkit (Wallet), com.apple.developer.authentication-services.authentication (Sign in with Apple) y com.apple.developer.nfc.readersession.formats (NFC). Para obtener estos entitlements, debe justificar su necesidad durante el proceso de App Review.
Al trabajar con entitlements, es importante considerar las diferencias entre iOS y macOS. Las aplicaciones de escritorio macOS (Sandboxed) tienen un conjunto más amplio de entitlements en comparación con iOS. Por ejemplo, el entitlement com.apple.security.temporary-exception.* permite omitir temporalmente el sandbox para ciertas operaciones — tales entitlements están completamente ausentes en iOS.
Los Entitlements están estrechamente vinculados a los Perfiles de Aprovisionamiento (Provisioning Profiles). Un perfil de aprovisionamiento es un archivo que vincula el certificado de desarrollador, una lista de dispositivos permitidos y un conjunto de entitlements para una aplicación específica. Al instalar una aplicación, el sistema compara los entitlements en el código con los entitlements en el perfil de aprovisionamiento. Si un entitlement está presente en el código pero ausente en el perfil, la aplicación no obtendrá acceso a la función correspondiente.
Para diagnosticar problemas con entitlements, primero verifique el perfil de aprovisionamiento. Xcode genera automáticamente perfiles basados en las capabilities seleccionadas en el portal de Apple Developer. Si una capability se añade en Xcode pero no está activa en el portal, la aplicación fallará con un error de firma al intentar usar una función protegida.
Veamos los entitlements más utilizados en el desarrollo de iOS. aps-environment (Push Notifications) — obligatorio para enviar notificaciones push. com.apple.developer.ubiquity-container-identifiers (iCloud) — para sincronización de datos a través de CloudKit. com.apple.security.application-groups — para compartir datos entre aplicaciones y extensiones. com.apple.developer.associated-domains — para Universal Links y Handoff.
Cada uno de estos entitlements tiene un procedimiento de configuración estricto. Push Notifications requiere generar una clave APNs en el portal de Apple Developer y habilitar la capability en Xcode. Después de eso, el entitlement se establece automáticamente en el archivo .entitlements. iCloud requiere configurar un contenedor en el portal y seleccionarlo en Xcode desde la lista desplegable.
Associated Domains — un entitlement que vincula la aplicación con un dominio web. Se utiliza para Universal Links (enlaces profundos que se abren directamente en la aplicación) y Handoff (continuar el trabajo en otro dispositivo Apple). El valor del entitlement contiene un array de cadenas en el formato applinks:example.com. Requiere colocar un archivo apple-app-site-association en el servidor.
Tabla de entitlements populares y sus propósitos:
| Clave Entitlement | Propósito | Requiere Revisión |
|---|---|---|
| aps-environment | Notificaciones Push | No |
| com.apple.developer.ubiquity-* | Sincronización iCloud | No |
| application-groups | Contenedor Compartido | No |
| com.apple.developer.healthkit | Datos HealthKit | Sí |
| com.apple.developer.nfc.* | Lectura NFC | Sí |
| associated-domains | Universal Links | No |
Preguntas Frecuentes
Entitlements son derechos estáticos integrados en la firma de la aplicación y verificados por el sistema al iniciar. Los permisos son autorizaciones dinámicas solicitadas al usuario en tiempo de ejecución (cámara, geolocalización).
Use el comando codesign -d --entitlements en la terminal de macOS. Para aplicaciones de la App Store, los entitlements se verifican mediante la utilidad ProvisionQL o a través de Xcode Organizer.
Cambiar los entitlements requiere una nueva compilación y volver a firmar la aplicación. Si el entitlement requiere aprobación de Apple, deberá pasar nuevamente por App Review. Sin volver a firmar, es imposible cambiar los entitlements.
Un archivo .entitlements es un documento XML en formato plist almacenado en el proyecto de Xcode. Contiene una lista de todos los entitlements de la aplicación de forma estructurada y se firma junto con el archivo ejecutable.
Capabilities son interruptores de alto nivel en la pestaña Signing & Capabilities en Xcode. Habilitar una capability añade automáticamente los entitlements correspondientes al archivo .entitlements y configura el perfil de aprovisionamiento.
Resumen
Desarrollaremos una aplicación móvil llave en mano
IT Sectr crea aplicaciones para iOS y Android para startups y empresas desde 2017. Le asesoraremos y le propondremos la mejor solución.
Lea también