El Perfil de Aprovisionamiento vincula los certificados del desarrollador, el identificador de la aplicación y una lista de dispositivos permitidos para la firma de código de aplicaciones iOS. Según la Apple Developer Documentation, 2026, el perfil es necesario para cualquier ejecución de la aplicación en un dispositivo físico — sin él Xcode no puede instalar una compilación en un iPhone o iPad. En este artículo analizaremos la estructura, los tipos y el proceso de creación de perfiles.
Puntos Clave
Un Perfil de Aprovisionamiento es un archivo de configuración digital en formato .mobileprovision (para iOS) o .provisionprofile (para macOS) que Apple utiliza para controlar la instalación y ejecución de aplicaciones en dispositivos. El perfil contiene metadatos de firma de código, sin los cuales la aplicación no puede ejecutarse en un iPhone, iPad o Apple Watch físicos — el simulador no requiere perfil porque el código no se firma para ejecutarse en un procesador real.
El perfil se emite a través de Apple Developer Portal y tiene una fecha de vencimiento, generalmente un año para los perfiles Development y Distribution. Según la política de Apple, el perfil se vincula automáticamente al certificado del Apple Developer Program bajo el cual fue firmado: si el certificado se revoca o expira, el perfil deja de funcionar.
Cada perfil contiene un UUID único que Xcode utiliza para identificar el perfil en el llavero. Xcode selecciona automáticamente el perfil adecuado durante la compilación, pero el desarrollador puede anular la selección en la configuración de Signing & Capabilities. En un solo dispositivo se puede instalar un número ilimitado de perfiles — el sistema de gestión de dispositivos móviles (MDM) de Apple utiliza esto para la distribución corporativa de aplicaciones.
La firma de código es la razón principal de la existencia de los perfiles. Apple exige que cada aplicación ejecutada en un dispositivo iOS esté firmada con un certificado emitido por Apple. El Perfil de Aprovisionamiento actúa como enlace: confirma que el desarrollador tiene derecho a ejecutar la aplicación en ese dispositivo. Según la Apple Security Guide (2025), el mecanismo de perfiles evita la instalación de malware en los dispositivos de los usuarios incluso si se compromete un certificado de desarrollador.
El perfil también determina qué servicios del sistema están disponibles para la aplicación. Si la aplicación utiliza notificaciones Push, el Apple Push Notification service (APNs) requiere entitlements correctos dentro del perfil. Sin esto, las notificaciones del servidor no se entregarán al dispositivo. La misma regla se aplica a iCloud, App Groups, Wallet, HealthKit y otros frameworks de Apple.
Los desarrolladores suelen confundir el Perfil de Aprovisionamiento con un Certificado de Apple. Un certificado es un documento digital que confirma la identidad (quién firma), mientras que un perfil es una configuración (qué aplicación, en qué dispositivos, con qué permisos). Un mismo certificado puede usarse en varios perfiles, y un perfil está vinculado exactamente a un certificado. Apple recomienda crear un perfil separado para cada aplicación y cada escenario — Development, Ad Hoc, App Store.
El proceso de firma de la aplicación consta de varios pasos secuenciales. Xcode toma el binario de la aplicación (App Bundle), lo firma con la clave privada del desarrollador, incrusta el Perfil de Aprovisionamiento y lo envía al dispositivo. El dispositivo verifica la firma con la clave pública de Apple, compara el UUID del perfil con la lista de perfiles de confianza en el sistema y ejecuta la aplicación solo si todas las comprobaciones son exitosas.
Cuando un usuario descarga una aplicación de App Store, el mecanismo es diferente. App Store Connect vuelve a firmar la aplicación con su propio certificado Distribution de Apple, reemplazando el perfil del desarrollador por un perfil de Store. Esto significa que una aplicación publicada a través de App Store está técnicamente firmada por Apple, no por el desarrollador — aunque la firma original del desarrollador se verifica durante la carga de la compilación en App Store Connect.
Para la distribución Ad Hoc, el perfil registra UDIDs de dispositivos específicos en los que se permite ejecutar la aplicación. Una cuenta gratuita de Apple Developer Program limita las pruebas a 100 dispositivos por año. Los perfiles Enterprise (para distribución interna en una organización) no tienen límite de dispositivos, pero requieren una suscripción activa a Apple Developer Enterprise Program con un costo de $299 al año.
El período de validez de un Perfil de Aprovisionamiento es de un año desde su creación. 30 días antes del vencimiento, Apple comienza a enviar notificaciones push al desarrollador a través de Xcode y Developer Portal. Si el perfil expira, una aplicación ya instalada continúa funcionando, pero no se puede instalar una nueva compilación con ese perfil. Xcode muestra un error de firma de código con el código -402620394 al intentar compilar con un perfil vencido. Apple recomienda configurar la renovación automática de perfiles a través de Xcode Accounts Preferences — Xcode renueva el perfil 24 horas antes del vencimiento.
Apple ofrece cuatro tipos principales de Perfiles de Aprovisionamiento, cada uno diseñado para una etapa específica del ciclo de vida de la aplicación. El perfil Development permite ejecutar la aplicación en dispositivos físicos agregados al Apple Developer Portal y se utiliza durante el desarrollo y las pruebas de QA. Una cuenta gratuita de desarrollador de Apple es suficiente para crear un perfil Development.
El perfil Ad Hoc está diseñado para distribuir la aplicación a un grupo limitado de evaluadores sin usar App Store. El perfil registra hasta 100 dispositivos por UDID, y la aplicación se puede instalar directamente a través de iTunes, Apple Configurator o soluciones MDM. Las compilaciones Ad Hoc tienen un período de validez de 12 meses y no requieren revisión de Apple.
El perfil App Store se utiliza exclusivamente para publicar la aplicación en App Store y no contiene una lista de dispositivos — Apple misma gestiona la distribución después de la aprobación de la compilación. Al cargar un archivo en App Store Connect, Xcode utiliza automáticamente el perfil App Store si está instalado en el sistema. El perfil Enterprise es para organizaciones con Apple Developer Enterprise Program y permite la distribución interna de aplicaciones sin límite de dispositivos ni revisión de Apple.
| Tipo de perfil | Propósito | Dispositivos | Costo de suscripción |
|---|---|---|---|
| Development | Desarrollo y pruebas | Hasta 100 UDID | Gratuito / $99 al año |
| Ad Hoc | Distribución a evaluadores | Hasta 100 UDID | $99 al año |
| App Store | Publicación en App Store | Cualquiera (a través de Apple) | $99 al año |
| Enterprise | Distribución interna | Ilimitado | $299 al año |
Un Perfil de Aprovisionamiento es un archivo en formato DER firmado por Apple, cuyo contenido se puede ver mediante la línea de comandos. Security framework de macOS permite decodificar .mobileprovision en un plist XML legible. Dentro del perfil se encuentran: UUID del perfil, App ID (prefijo del equipo + Bundle Identifier), lista de certificados, lista de dispositivos permitidos (solo para Development y Ad Hoc), entitlements y fecha de vencimiento.
App ID es un identificador único de la aplicación que consta de un Team ID (10 caracteres asignados por Apple) y un Bundle Identifier (por ejemplo, com.example.myapp). Un App ID puede ser explícito (coincidencia exacta con Bundle Identifier) o wildcard (patrón *.example.com para varias aplicaciones). Apple no recomienda usar wildcard para aplicaciones que utilizan notificaciones Push o iCloud — estos servicios requieren un App ID explícito.
Entitlements es un bloque XML dentro del perfil que define los derechos de acceso de la aplicación a los recursos del sistema. Los entitlements típicos incluyen: aps-environment (notificaciones Push), com.apple.developer.icloud-services (iCloud), com.apple.security.application-groups (App Groups para Widget y Share Extension). Apple agrega automáticamente entitlements al perfil según las Capabilities activadas en Xcode. Cualquier discrepancia entre los entitlements en el perfil y los solicitados en el código provoca un error de firma.
La creación de un perfil es posible de dos maneras: a través de la interfaz web de Apple Developer Portal o automáticamente mediante Xcode. Para un proyecto típico, Xcode gestiona los perfiles automáticamente con la opción Automatically manage signing activada. Xcode crea un certificado, perfil y App ID en segundos, sincronizándose con Apple Developer Portal. Sin embargo, los pipelines CI/CD requieren gestión manual.
Para crear un perfil manualmente en Apple Developer Portal: vaya a Certificates, Identifiers & Profiles, seleccione Profiles y presione "+". Luego seleccione el tipo de perfil (Development, Ad Hoc, App Store o Enterprise), seleccione un App ID de la lista registrada, seleccione un certificado de desarrollador y (para Development y Ad Hoc) seleccione dispositivos. Después de la creación, el perfil se descarga en formato .mobileprovision y se instala con doble clic en Xcode.
Los servidores CI/CD requieren un enfoque especial: el perfil y el certificado deben almacenarse en un repositorio seguro (por ejemplo, en secretos de GitHub Actions). Durante la compilación, el perfil se carga en el agente, se coloca en ~/Library/MobileDevice/Provisioning Profiles y el certificado se importa al llavero. Fastlane — una herramienta popular para la automatización de firmas — proporciona el comando match, que sincroniza perfiles y certificados entre desarrolladores a través de un repositorio git cifrado.
Para diagnosticar problemas de firma de código, puede decodificar el .mobileprovision y verificar su contenido. El siguiente comando extrae el plist XML del perfil y lo guarda en un formato legible:
# Decodificación de .mobileprovision a XML
security cms -D -i "path/to/embedded.mobileprovision" \
-o "profile.plist"
# Comprobación de la fecha de vencimiento del perfil
plist -convert xml1 profile.plist -o -
grep -A 1 "ExpirationDate" profile.plist
La utilidad Security de macOS Command Line Tools decodifica el archivo de perfil firmado con CMS. La bandera -D significa decodificación, -i especifica el archivo de entrada. Después de la decodificación, la utilidad plist convierte el plist binario a XML, y grep extrae la fecha de vencimiento. Este método es útil en CI/CD para verificar que el perfil no esté vencido antes de compilar una versión.
El error más común es "No matching provisioning profiles found" al compilar en Xcode. Ocurre cuando Xcode no encuentra un perfil que coincida con la configuración de compilación: el Bundle Identifier no coincide con el App ID en el perfil, el certificado no está instalado en el llavero o el perfil ha expirado. La solución es verificar la configuración de Signing & Capabilities en el target y, si es necesario, cambiar a Automatically manage signing.
El error "Provisioning profile doesn't include the selected device" aparece al intentar ejecutar una compilación Development o Ad Hoc en un dispositivo cuyo UDID no está agregado al perfil. Apple Developer Portal permite agregar un dispositivo a un perfil existente — después de eso, el perfil debe descargarse e instalarse nuevamente. Xcode con gestión automática de firma agrega el dispositivo conectado al perfil automáticamente.
Un problema con los entitlements se manifiesta con el error "The executable was signed with invalid entitlements" al cargar en App Store Connect. La causa es una discrepancia entre los entitlements en el perfil y los del archivo .entitlements del proyecto. Apple requiere que el conjunto de derechos en el perfil sea un superconjunto de los derechos solicitados por la aplicación. La solución es verificar las Capabilities en el target de Xcode y asegurarse de que todos los servicios habilitados tengan entitlements correspondientes en el perfil. Fastlane incluye el comando produce, que sincroniza los App ID y perfiles con los entitlements actuales.
Preguntas Frecuentes
Sí, si el App ID en el perfil utiliza un identificador wildcard de la forma com.example.*. Sin embargo, los perfiles wildcard no admiten notificaciones Push, iCloud, Game Center y App Groups. Apple recomienda crear un perfil explícito separado para cada aplicación que utilice Capabilities avanzadas.
Una aplicación cargada a través de App Store utiliza el perfil Store de Apple, que es independiente del perfil del desarrollador. Los usuarios pueden seguir descargando y ejecutando la aplicación. Un perfil expirado solo impide la carga de una nueva compilación en App Store Connect — Apple requiere que el perfil Distribution sea válido en el momento del envío.
El perfil se puede copiar a la carpeta ~/Library/MobileDevice/Provisioning Profiles en el nuevo ordenador. Sin embargo, el perfil está vinculado a un certificado cuya clave privada está en el llavero. También debe exportar el certificado con su clave privada a través de Keychain Access e importarlo en el nuevo dispositivo.
No hay límite en la cantidad de perfiles en un ordenador. Los perfiles se almacenan en ~/Library/MobileDevice/Provisioning Profiles y se identifican por UUID. Xcode selecciona automáticamente el perfil adecuado según el App ID y el tipo de compilación. Para simplificar la gestión, se recomienda eliminar los perfiles no utilizados a través de Xcode Accounts Preferences.
Un Certificado de Firma confirma la identidad del desarrollador — es una clave criptográfica emitida por Apple. Un Perfil de Aprovisionamiento es un archivo de configuración que especifica qué aplicación (App ID) puede ejecutarse bajo qué certificado y en qué dispositivos. El perfil siempre hace referencia a un certificado específico, pero no lo reemplaza.
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