iOS - Signing Certificates y Provisioning Profiles

Uno de los requisitos fundamentales a la hora de distribuir una app para iOS es la generación de Signing Certificates y Provisioning Profiles. En este artículo serán identificados los pasos necesarios para generarlos y poder manipularlos.

iOS - Signing Certificates y Provisioning Profiles

Los Signing Certificates son archivos encriptados provistos por Apple que nos permiten firmar las aplicaciones permitiendo asegurar la autenticidad de estas.

Los Provisioning Profiles también son archivos provistos por Apple pero en este caso no están encriptados. Se utilizan para asociar el identificador de nuestra app con funcionalidades provistas por Apple (push notifications, Apple Pay, mapas, etc.) y/o dispositivos de desarrollo.

Los Signing Certificates y Provisioning Profiles[1] (en adelante SCyPP) pueden ser de desarrollo o de distribución. Los de desarrollo servirán para ejecutar nuestra app en simuladores y los de distribución para ejecutar nuestra app en dispositivos reales y para distribuir nuestra app en AppStore.

Si bien xCode nos facilita la gestión automática de estos, entender cómo funcionan es importante si necesitamos compartirlos para trabajar en equipo o si queremos automatizar el proceso de distribución de nuestra app.

Credenciales

Para poder obtener SCyPP es necesario contar con un Apple ID asociado a Apple Developer Program.

El Apple ID es la cuenta que se utiliza para acceder a los dispositivos y servicios de Apple. Este se puede obtener a través de https://appleid.apple.com/. Podemos asociarnos a Apple Developer Program a través de https://developer.apple.com/programs/enroll. Es habitual que el dueño de la aplicación que estemos desarrollando sea un tercero, en ese caso, debemos solicitarle que asocie nuestro Apple ID a su organización.

Una vez que contamos con un Apple ID asociado a Apple Developer Program podemos generar SCyPP a través de https://developer.apple.com/account en el apartado Certificates, IDs & Profiles o a través de xCode.

Vamos a detallar el proceso a través de xCode que es más sencillo de ejecutar.

1. Abrir el proyecto en xCode, seleccionar la pestaña Signing & Capabilities y habilitar la casilla Automatically manage signing.

En este caso, se trata de un proyecto creado a través de Flutter, por lo que el proyecto y el target principal se denominan Runner.

2. En el desplegable Team seleccionar la organización asociada a Apple Developer Program. En el caso que xCode no tenga configurado nuestro Apple ID podemos agregarlo a través de la opción Add an account… del desplegable Team.

3. xCode se encargará de generar y/o descargar los SCyPP correspondientes. Durante el proceso nos solicitará la clave de nuestro Keychain para almacenarlos localmente.

4. Podemos chequear la correcta generación de SCyPP ejecutando nuestra app. Para verificar los de desarrollo, lo hacemos en un simulador y para verificar los de distribución, en un dispositivo real.

5. Abrir la aplicación Keychain Access.

6. Seleccionando el keychain login y la pestaña My Certificates podemos ver los certificados generados.

7. Podemos exportar cada certificado haciendo click derecho sobre su nombre. Nos solicitará un nombre para el archivo, su formato (Certificate o Personal Information Exchange) y una clave para proteger el archivo. Cualquiera de los dos formatos es de utilidad.

8. Los provisioning profile generados serán almacenados en archivos de extension .mobileprovision dentro de ~/Library/MobileDevice/Provisioning Profiles

De esta manera obtenemos:

  • certificado de desarrollo
  • certificado de distribución
  • provisioning profile de desarrollo
  • provisioning profile de distribución

Accediendo a Provisioning Profiles

Al momento de compilar una aplicación será necesario indicar el provisioning profile que utilizaremos. Habitualmente xCode se encarga de resolverlo automáticamente, pero, si compilamos manualmente, necesitaremos indicar el nombre del provisioning profile que utilizaremos.

Hay dos formas de obtener el nombre de un provisioning profile:

Para hacerlo desde el sitio web debemos ingresar a http://developer.apple.com/account y, en el apartado Certificates, IDs & Profiles, seleccionar la opción Profile. Luego serán listados los provisioning profiles creados, accediendo a cada uno podemos ver su nombre y el ID de la app a la que está asociado.

Si tenemos el provisioning profile almacenado localmente podemos accederlo mediante la ruta ~/Library/MobileDevice/Provisioning Profiles, el contenido de cada archivo de extensión mobileprovision corresponde a un provisioning profile, su contenido se encuentra encriptado. Podemos desencriptarlo con el siguiente comando

/usr/bin/security cms -D -i [ruta al archivo]

Los campos application-identifier y name son los que contienen la información que necesitamos. Mediante estos podemos especificar que provisioning profile utilizaremos para nuestra app.

Conclusiones

Aplicando los conceptos detallados anteriormente y mediante el uso de las herramientas indicadas podemos firmar y distribuir nuestra app iOS de manera segura y cumpliendo con los requisitos de Apple. Además, fueron descriptos los pasos necesarios para obtener y manipular SCyPP con la finalidad de automatizar el proceso de distribución de nuestra app iOS.


[1] Se conservaron estos términos y otros en su idioma original debido a que así es como figuran en xCode y en la web de Apple que son las herramientas que utilizamos para gestionarlos.