# Certificado iOS y provisioning profile con Expo

> El certificado prueba quién firma tu app, el provisioning profile dice qué app y en qué iPhone. Con Expo, EAS crea y renueva ambos por ti.

Página original: [Certificado iOS y provisioning profile con Expo](https://devoria.fr/es/blog/certificado-ios-provisioning-profile-expo)
Autor: [Mehdi Azizi](https://devoria.fr/es/mehdi-azizi)
Publicación: 2026-11-04
Última revisión del contenido: 2026-11-04


Un certificado de desarrollador iOS prueba quién firmó tu app. El provisioning profile, o perfil de aprovisionamiento, vincula ese certificado a una app concreta e indica dónde tiene permiso para ejecutarse. **Con Expo, casi nunca tienes que crearlos a mano: EAS los crea, los guarda y los renueva cuando lanzas un build.**

Aun así, vale la pena entender qué hace cada archivo. El día que un build se niega a instalarse o que un envío se bloquea, ese conocimiento te ahorra un día entero. Esta guía repasa los cuatro elementos, su vida útil, los límites de Apple y los errores típicos, con la solución para cada uno.

Publico mis apps iOS con Expo y EAS, entre ellas Solys y TradaZen. El recorrido completo está en [publicar una app iOS sin Mac](https://devoria.fr/es/blog/publicar-app-ios-sin-mac-expo-eas). Aquí abrimos el capó de la firma.

## Por qué Apple exige una firma

Una app iOS tiene que estar firmada para instalarse en un iPhone o enviarse a App Store Connect. La firma garantiza que la app viene de un desarrollador conocido por Apple y que nadie la ha modificado desde entonces.

Para el App Store, hay un detalle que tranquiliza. Según [la nota técnica TN3161 de Apple](https://developer.apple.com/documentation/technotes/tn3161-inside-code-signing-certificates), el App Store verifica que tu certificado de distribución sea válido en el momento del envío y luego vuelve a firmar la app, que ya no depende de la fecha de vencimiento de tu certificado. **Así que tus certificados deben ser válidos al momento del envío, no durante toda la vida de la app.**

## Los cuatro elementos que debes conocer

[La documentación de Expo sobre credenciales](https://docs.expo.dev/app-signing/app-credentials/) cuenta tres para iOS: el certificado de distribución, los perfiles y la clave de notificaciones push. Yo agrego el identificador de app, sin el cual no existe ningún perfil.

### El certificado de distribución

Es tu firma de desarrollador. [La ayuda de Apple sobre certificados](https://developer.apple.com/help/account/certificates/certificates-overview) distingue dos familias:

- **Apple Development** sirve para ejecutar tu app en tus dispositivos durante el desarrollo. Pertenece a una persona.
- **Apple Distribution** sirve para distribuir en dispositivos de prueba designados o para enviar a App Store Connect. Pertenece al equipo, y solo el titular de la cuenta o un admin pueden crearlo.

El certificado de distribución no corresponde a ninguna app en particular: el mismo firma todas tus apps. Va acompañado de una clave privada, y es ella la que permite firmar. Según TN3161, un certificado de Apple suele ser válido por un año desde su creación.

### El identificador de app (App ID)

El App ID identifica tu app dentro de un perfil. Retoma tu identificador de bundle, por ejemplo `com.example.myapp` (ejemplo ficticio). Según [la ayuda de Apple](https://developer.apple.com/help/account/identifiers/register-an-app-id), también lleva la lista de capacidades autorizadas: notificaciones push, App Groups, Sign in with Apple…

Con Expo, es el campo `ios.bundleIdentifier` de tu configuración. **Elígelo de una vez por todas**: debe ser idéntico en todas partes, tanto en tu configuración como en App Store Connect. El App ID no vence. Y según [la documentación de Expo sobre capacidades iOS](https://docs.expo.dev/build-reference/ios-capabilities/), EAS sincroniza sus capacidades con tu configuración en cada build.

### El perfil de aprovisionamiento

El perfil hace de enlace. Contiene un App ID, un certificado y, según su tipo, una lista de dispositivos autorizados. Te interesan tres tipos:

- **Desarrollo**: tu app de prueba en tus dispositivos registrados.
- **Ad hoc**: un build instalable en una lista precisa de dispositivos, cada uno identificado por su UDID. Es la "distribución interna" de EAS.
- **App Store**: para App Store Connect y TestFlight. No contiene ninguna lista de dispositivos, explica [la nota TN3125](https://developer.apple.com/documentation/technotes/tn3125-inside-code-signing-provisioning-profiles).

Cada perfil tiene una fecha de vencimiento: no más de un año en general según Apple, 12 meses según Expo.

### La clave de notificaciones push (APNs)

La clave APNs autoriza a tu servidor, o al de Expo, a enviar notificaciones a tu app. Es un archivo .p8 que solo se descarga una vez: [Apple no lo conserva](https://developer.apple.com/help/account/keys/create-a-private-key) en tu cuenta. Una misma clave sirve para todas tus apps, y [nunca vence](https://developer.apple.com/support/expiration/).

## La tabla resumen

| Elemento                    | Sirve para             | Duración          | Quién lo gestiona con Expo |
| --------------------------- | ---------------------- | ----------------- | -------------------------- |
| Certificado de distribución | Firmar tus builds      | Un año en general | EAS, tras iniciar sesión   |
| App ID                      | Identificar tu app     | No vence          | Tú, luego EAS              |
| Perfil App Store            | Enviar a Apple         | Hasta 12 meses    | EAS                        |
| Perfil ad hoc               | Instalar en tus iPhone | Hasta 12 meses    | EAS y tus dispositivos     |
| Clave push APNs             | Enviar notificaciones  | No vence          | EAS o tú                   |
| Perfil de cuenta gratuita   | Probar con Xcode       | 7 días            | Xcode, no EAS              |

"Tú, luego EAS": tú eliges el identificador de bundle y EAS se encarga de las capacidades. "EAS y tus dispositivos": tú registras cada iPhone de prueba y EAS genera el perfil. La última fila corresponde a la cuenta gratuita de Apple: según [la ayuda de Apple sobre cuentas](https://developer.apple.com/help/account/basics/about-your-developer-account), sus perfiles vencen 7 días después de crearse.

## Los límites de Apple que debes conocer

- **Certificados de distribución**: muy pocos por cuenta. La ayuda de Apple habla de uno solo por tipo de distribución y por equipo, la tabla de Expo de un límite de 2. Quédate con la regla: **no crees un certificado nuevo en cada build ni en cada computadora.**
- **Claves APNs**: 2 por cuenta como máximo, según Expo.
- **Perfiles**: sin límite, según Expo.
- **Dispositivos**: hasta 100 por familia de productos y por año de membresía, según [la ayuda de Apple sobre dispositivos](https://developer.apple.com/help/account/devices/devices-overview). Desactivar un dispositivo no libera espacio. El contador vuelve a 100 al inicio del siguiente año de membresía, si eliminas los dispositivos.

## Lo que EAS hace por ti

Según [la página de Expo sobre credenciales gestionadas](https://docs.expo.dev/app-signing/managed-credentials/), tu primer build iOS te propone generar lo que falta. Inicias sesión en tu cuenta de Apple Developer, EAS crea el certificado de distribución, el perfil y la clave push, y luego los guarda en sus servidores. Los builds siguientes los reutilizan.

Tres puntos útiles:

- **Tu contraseña de Apple se queda en tu máquina.** [La página de seguridad de Expo](https://docs.expo.dev/app-signing/security/) aclara que no se envía a sus servidores y que las credenciales guardadas están cifradas.
- **`eas credentials` te muestra todo**: certificado, perfiles, clave push. El comando también permite reemplazarlos o eliminarlos.
- **Eliminar en EAS no elimina en Apple.** Para liberar espacio, hay que revocar en el portal de Apple.

También puedes mantener el control con credenciales locales: un archivo `credentials.json` apunta a tu certificado (.p12) y a tu perfil (.mobileprovision). Expo pide agregar esos archivos al `.gitignore`. Es la misma regla que para [las claves API de una app Expo](https://devoria.fr/es/blog/clave-api-secreta-expo-que-proteger): un secreto nunca va al repositorio.

## Los errores típicos y cómo resolverlos

### Perfil vencido

Un build ad hoc incluye su perfil: cuando vence, la app ya no abre en tus iPhone de prueba. En el App Store, en cambio, Expo confirma que el vencimiento no tiene ningún efecto en la app en producción. **La solución: lanza un nuevo build.** EAS genera un perfil nuevo, o lo haces tú mismo con `eas credentials`. Luego reinstala el nuevo build en tus dispositivos.

No lo confundas con TestFlight: un build de TestFlight vence a los 90 días, sin importar tu certificado. El detalle está en [TestFlight para probar tu app de iPhone](https://devoria.fr/es/blog/testflight-probar-app-iphone-antes-de-enviarla).

### Certificado vencido o revocado

Apple es claro: si tu membresía está vigente, tus apps que ya están en el App Store no se ven afectadas. En cambio, ya no puedes enviar builds firmados con ese certificado. Un build enviado pero aún no sometido a revisión puede marcarse como Invalid Binary si su certificado fue revocado. Y [los perfiles que contienen un certificado revocado dejan de ser válidos](https://developer.apple.com/help/account/certificates/revoke-a-certificate).

**La solución: crea un certificado nuevo desde `eas credentials` o en el próximo build**, y deja que EAS rehaga los perfiles. Y nunca revoques por reflejo un certificado que funciona.

### Dispositivo ausente del perfil ad hoc

El enlace de instalación funciona en tu iPhone, pero no en el de un tester. La causa: [la documentación de Expo sobre distribución interna](https://docs.expo.dev/build/internal-distribution/) explica que solo los dispositivos presentes en el perfil al momento del build pueden instalar la app.

La solución:

1. Registra el dispositivo con `eas device:create`.
2. Lanza un nuevo build en modo interactivo, con sesión iniciada en tu cuenta de Apple, para que EAS actualice el perfil. O vuelve a firmar el build existente con `eas build:resign`, sin recompilar todo.
3. En integración continua, el modo no interactivo reutiliza el perfil sin actualizar su lista. Agrega la opción `--refresh-ad-hoc-provisioning-profile`.

En una cuenta nueva o recién renovada, Apple puede tardar de 24 a 72 horas en procesar un dispositivo nuevo. El primer build que lo incluye puede fallar: espera y vuelve a lanzarlo.

### Límite de certificados alcanzado

Apple se niega a crear un nuevo certificado de distribución. A menudo quedan certificados viejos por ahí: creados desde Xcode en otra Mac o por otro servicio de build. **Reutiliza el certificado existente si tienes su archivo .p12. Si no, revoca el que ya no uses** en el portal de Apple. Una revocación no afecta tus apps ya publicadas, pero invalida los perfiles que lo contenían.

### "Provisioning profile doesn't include signing certificate"

Este mensaje de Xcode significa que el perfil no contiene el certificado cuya clave privada está en tu máquina. Causa típica: mezclar la firma automática de Xcode con las credenciales de EAS. **Elige una sola fuente de verdad**: builds de EAS con credenciales gestionadas, o credenciales locales, pero no ambas.

### Notificaciones cortadas tras revocar una clave

Si revocas tu clave APNs, Expo advierte que todas las apps que la usan dejan de recibir notificaciones. Crea una clave nueva y súbela con `eas credentials`. Los tokens de Expo Push de tus usuarios no cambian.

### Capacidad agregada, perfil inválido

Activar un servicio como las notificaciones push o App Groups [invalida el perfil](https://developer.apple.com/help/account/provisioning-profiles/edit-download-or-delete-profiles): hay que regenerarlo. Con EAS, la sincronización de capacidades se hace en cada build. Si el perfil sigue siendo rechazado, `eas credentials` permite generar uno nuevo.

## Lo que sigue después de la firma

Un build firmado es solo una etapa. La ficha, las capturas, la privacidad y el envío a revisión están reunidos en [publicar una aplicación en el App Store](https://devoria.fr/es/expertise/publicar-una-app-en-app-store). Si todavía no tienes tu membresía, empieza por [la cuenta de desarrollador de Apple](https://devoria.fr/es/blog/cuenta-desarrollador-apple-precio). Y para entender por qué recomiendo Expo a los principiantes, lee [React Native y Expo para una app móvil](https://devoria.fr/es/expertise/app-movil-react-native-expo).

## Si preparas tu primera publicación

Antes de tu primer envío, haz el [diagnóstico gratuito](https://devoria.fr/es/diagnostic): te dice qué es lo que realmente bloquea tu proyecto y te envía mi checklist para evitar rechazos de Apple.

Para construir la app, conectar las suscripciones y publicarla sin pelearte con la firma, el [iOS & Android Kit](https://devoria.fr/es/kits/ios) sigue el recorrido en cuatro etapas con el código base de mis apps, a tu ritmo.

## Preguntas frecuentes

### ¿Qué es un provisioning profile?

Es el archivo que autoriza a tu app a ejecutarse o a enviarse a Apple. Vincula un identificador de app, un certificado y, según su tipo, una lista de dispositivos. Un perfil App Store no contiene ningún dispositivo, un perfil ad hoc incluye algunos.

### ¿El certificado de desarrollador iOS es gratis?

No tiene un precio aparte: el certificado de distribución está incluido en el Apple Developer Program, que cuesta 99 $ al año. Con una cuenta gratuita de Apple, Xcode te deja probar en 3 dispositivos como máximo, pero los perfiles vencen a los 7 días y no puedes publicar.

### ¿Cuánto dura un certificado de distribución de Apple?

En general un año desde su creación, según Apple. Los perfiles de aprovisionamiento también duran 12 meses como máximo. La clave de notificaciones push, en cambio, nunca vence.

### ¿Qué pasa si mi certificado de distribución vence?

Nada para tus apps que ya están en el App Store, mientras tu membresía esté vigente. Simplemente ya no puedes enviar nuevos builds firmados con ese certificado. Con EAS, se crea un certificado nuevo en el próximo build o con `eas credentials`.

### ¿Se necesita una Mac para crear un certificado iOS?

No, si usas EAS. Inicias sesión en tu cuenta de Apple desde la línea de comandos y EAS genera el certificado y el perfil, tanto en Windows como en Linux. Sin EAS, el método clásico pasa por Xcode o el Acceso a Llaveros de una Mac.

### ¿Cuántos dispositivos puede contener un perfil ad hoc?

Tu cuenta puede registrar hasta 100 iPhone por año de membresía, y lo mismo para cada otra familia de dispositivos. Un dispositivo desactivado sigue contando. Para probar con más personas, usa TestFlight.


## Tu proyecto

[Review Kit](https://devoria.fr/es/kits/app-review): Mi checklist de revisión de App Store, mis rechazos de Apple corregidos, la de Google Play y tres skills de Claude Code. 49 €.

[iOS & Android Kit](https://devoria.fr/es/kits/ios): Crea tu app para iPhone y Android con Claude Code: el código base de mis apps, el camino hasta las tiendas y todos los kits. 99 €.

[Diagnóstico: lo que te separa de tu app para iPhone](https://devoria.fr/es/diagnostic): 7 preguntas, 60 segundos: descubre qué te frena de verdad para publicar tu app para iPhone, tu ruta en 4 etapas y el kit ideal para ti.
