¿Qué encontrarás en este post?
Toggle“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. 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?- Por joder.
- Por seguridad.
- 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. 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. 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. 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:- Uno o más «developer certificates»
- Uno o más identificadores de dispositivo.
- Un identificador de App
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.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.