Provisioning Profiles y Certificados en iOS para Torpes, por @frr149

| Última modificación: 8 de abril de 2024 | Tiempo de Lectura: 5 minutos

Algunos de nuestros reconocimientos:

Premios KeepCoding

“Provisioning profiles“, certificados de desarrollo, certificados de distribución en iOS

Toda la burrocracia que rodea el desarrollo para iOS con “provisioning profiles“, certificados de desarrollo, certificados de distribución y demás jerga insondable, resulta ser una fuente de dudas y frustración para novatos y veteranos. Muchos se han quedado calvos de tanto pensar en qué puñetas es cada cosa y para demonios sirve. La idea es explicar estas tonterías (no son más que burrocracia) de forma lo más sencilla posible, de tal manera que nadie vuelva a perder el tiempo con ello y pueda centrarse en lo que de verdad importa: el desarrollo de apps.
rongorongo_Provisioning Profiles
Tableta Rongo-Rongo encontrada en la Isla de la Pascua donde se explica, de forma clara y concisa el uso de developer certifcates y provisioning profiles.
Que no cunda el pánico, en el fondo es sencillo y para entenderlo no hace falta estar versado en la Hermenéutica del Zoroastro, ni en la transliteración de los Rongo-Rongo. Empecemos por el principio: ¿por qué coño hace falta todo este rollo infumable?
  1. Por joder.
  2. Por seguridad.
  3. Ninguna de las anteriores

La seguridad en iOS: todo código debe de ser firmado

La respuesta correcta es (b) . Como casi todas las peores molestias informáticas, esta proviene de la necesidad de imponer seguridad al sistema. iOS es uno de los sistemas más seguros del momento y uno de sus pilares es la firma de código.  Todos los binarios han de ser firmados por una autoridad conocida y sólo las páginas de memoria provenientes de fuentes firmadas pueden ser ejecutadas. Esto asegura que las apps han pasado un filtro y que no han sido modificadas, ni siquiera por ellas mismas, y dificulta enormemente la labor de cualquier atacante. Si logra hacerse con un proceso, querrá descargar código, pero no podrá ejecutarlo al no estar firmado. Desgraciadamente, la firma de código es también el principal motivo por el cual los usuarios hacen el jailbreak: para poder ejecutar lo que les apetezca. jail-brake-ios_Provisioning Profiles Podríamos decir que la firma de código representa en iOS algo parecido a los antivirus en los equipos de escritorio: nos asegura que la aplicación no ha sido adulterada y sigue siendo mínimamente de fiar.

Para firmar código necesitas un certificado

Para poder depurar tu App en un dispositivo, tu código tendrá que estar firmado por ti, y aquí es donde entra la primera pieza de nuestro entramado: el “developer certificate“. Por supuesto que si solo estás ejecutando tu App en el simulador, no te hace falta ningún certificado, pero tarde o temprano tendrás que comprobarla en un dispositivo real. Es más, es fundamental que lo hagas, ya que el comportamiento del simulador (recuerda que no es un emulador,sino un simulador) a veces difiere del dispositivo, sobre todo en cuestiones de rendimiento. Puedes en algunos casos aplazar el uso de un dispositivo, usando herramientas como iSimulate que amplían  las capacidades del simulador, pero a la larga tendrás que dar el brazo a torcer, pasar por caja y pagar los 99 USD del programa de desarrollo de Apple. Para poder depurar en un iPhone o iPad necesitas un certificado (recuerda en el  iPhone y el iPad sólo se ejecuta código firmado, y para firmar necesitas un certificado),y  tienes que ser miembro del programa de pago de desarrollo de Apple.

¿Qué es un certificado de desarrollo (developer certificate)?

Un “developer certificate” es un documento de texto con una clave criptográfica que te permite firmar  un documento. Por cierto, “firmar”, no es más que crear un hash. De esta forma, se sabe de forma inequívoca que el documento proviene de tí. Es algo similar a cuando firmas un pdf con un certificado de la FNMT en algún trámite de la administración pública.
El certificado que identifica a un desarrollador en concreto
El certificado que identifica a un desarrollador en concreto
Es decir, el certificado es como tu DNI, es algo que te identifica de forma inequívoca. Xcode lo utiliza para firmar tu ejecutable de forma que se pueda ejecutar en un dispositivo iOS.

¿Cómo obtengo un certificado de desarrollo (developer certificate)?

Quien te va a dar ese certificado es Apple, así que tenemos que pedirlo. Para ello, tienes que crear en “Keychain Access” un “certificate signing request”. Esto último no es más que otro certificado que le permite sabe a Apple que quien está pidiendo el certificado de desarrollo eres tú y no otra persona. Vete a “Keychain Access -> Certificate Assistant -> Request a Certificate From a Certified Authority” y sigue las instrucciones en pantalla. Cuando te pidan qué hacer con el fichero resultante, indica que lo quieres guardar en tu escritorio.
keychainAccess
Pidiendo que nos den un certificado
Ahora vete al “Provisioning Center” dentro del sitio del programa de desarrollo de Apple (recuerda que primero tienes que pagar: Tim necesita un yate nuevo, así que afloja) y selecciona la opción de “request a certificate”. Tendremos que subir el fichero que hemos generado con “Keychain Access”. Una vez hecho esto, nuestro certificado aparecerá como “pending”, es decir, está pendiente de ser generado. Pasados unos segundos, refresca la página y debería ya de aparecer como creado. Bájatelo (recuerda, es un fichero de texto) y haz doble clic sobre él. “Keychain Access” lo abrirá y lo añadirá a tus demás certificados. ¡Ya puedes firmar código! 🙂 ¿Quiere esto decir que ya puedes instalar apps que estés desarrollando en tus dispositivos? No. Todavía falta la segunda pieza: el “provisioning profile“.

¿Qué es un “provisioning profile”?

Recordemos que el “developer certificate” es un documento, una especie de DNI, que te identifica de forma inequívoca. Bien, pues un provisioning profile es una especie de billetera, donde llevas ese documento y otros más. Es decir, se trata de un conjunto de documentos. ¿Qué tipo de documentos? Un “provisioning profile” lleva 3 tipos de documentos:
  1. Uno o más “developer certificates”
  2. Uno o más identificadores de dispositivo.
  3. Un identificador de App
Los identificadores de dispositivo, como ya te lo podrías imaginar, identifican de forma inequívoca a un dispostivo (iPhone o iPad). Los identificadores de App hacen lo mismo pero para las Apps. Por lo tanto, un provisioning profile es un fichero que indica que:
Estos 3 frikis (cada uno identificado mediante su developer certificate) están autorizados a usar ésta App en desarrollo (identificada por su App Id) en estos 3 dispositivos.
provisioningProfile
Provisioning Profile: estos tres nerds pueden usar esta app en estos 3 dispositivos.
Para poder ejecutar una app en tu dispositivo, primero tendrás que instalar en él un provisioning profile que indica que tú (developer certificate) y tu dispositivo (device id) estais autorizados a usar esa app.

¿Cómo creo un provisioning profile?

Afortunadamente, alguien en Cupertino se ha apiadado de nuestras almas y ahora esto lo hace Xcode de forma automágica mediante el organizer. Siempre y cuando ya hayas creado tu developer certificate, basta con conectar el dispositivo en cuestión e intentar añadirlo en el Organizer. Xcode se encargará de crearte un provisioning profile por defecto. Si necesitas crear distintos provisioning profiles para tu equipo, entonces no te queda más remedio que ir al Provisioning Center e ir creándolos “a mano”. Para eso, es conveniente que te leas la documentación de Apple.

¿Cómo instalo un provisioning profile en mi dispositivo?

No hace falta, Xcode una vez más lo hace por ti. Simplemente selecciona el dispositivo y ejecuta la app sin más (al igual que harías con el simulador).

Certificados de desarrollo (developer certificates), provisioning profiles y… ¿certificados de distribución?

Ahora que ya tenemos claro para que sirven los developer certificates y los provisioning profiles, ¿qué pasa con los certificados de distribución? Estos los veremos en próximos artículos sobre cómo  subir Apps a la App Store y cómo hacer distribuciones adhoc, también explicados para niños de 5 años. ¡No te vayas muy lejos, que pronto estará online!
Fernando Rodríguez

iOS Developer & Co-Fundador de KeepCoding

Posts más leídos