¿Como crear certificado iOS para phonegap build desde windows?

Es una pregunta muy común en los foros de phonegap, y la respuesta mas común es “no se puede, necesitas un mac”, yo mismo la he dado muchas veces. Pero… parece que tanto yo como el resto de personas que respondieron eso estabamos equivocados.

A continuación voy a explicar como generar tu certificado para poder compilar las aplicaciones iOS sin tener que usar un mac, tan solo necesitaremos OpenSSL.

Prerequisitos:
Es neceario tener instalado Microsoft Visual C++ Redistributables, si no lo tienes o no estás seguro, el instalador de OpenSSL te lo hará saber.

Pasos:

1. instalamos OpenSSL (no cambieis ninguna de las opciones, solo siguiente siguiente hasta terminar, y muy importante, reiniciar el ordenador al terminar la instalación)

(si el link no funciona, buscar la última versión )

2. Creamos un directorio en el ordenador en el que vamos a generar el certificado.

3. Abrimos una ventana de cmd (preferiblemente como administrador) y vamos al directorio creado en el paso 2.

4. Creamos una clave con el siguiente comando

C:/OpenSSL-Win32/bin/openssl genrsa -out miclave.key 2048

5. Creamos un CSR (Certificate Signing Request) con el siguiente comando

C:/OpenSSL-Win32/bin/openssl req -new -key miclave.key -out CertificateSigningRequest.certSigningRequest -subj "/emailAddress=email@correo.es, CN=Tu Nombre, C=ES"

en emailAddress pon tu correo de desarrollador, en CN tu nombre y en C cambialo por el código de tu país si no eres de España.

6. Creamos el certificado de desarrollador.
Para ello vamos a la web de desarrollador de apple 
En la sección de certificados pinchamos en “Development”, luego en el + y marcamos la opción “iOS app development” y finalmente pinchamos en “Continue” (ver imagen para mas detalles)
nullCaptura_Certificado_ios

7. Ignoramos esta pantalla que explica como generar el CSR desde un mac, nosotros ya lo hemos hecho en el punto 5. Simplemente pinchamos en “Continue”

8. Pinchamos en “Choose file” y seleccionamos el CSR generado en el punto 5. Una vez seleccionado pinchamos en “Generate” y tardará un rato en generar el certificado.

9. Descargamos el certificado pinchando en “Download” y lo guardamos como oro en paño, subelo a dropbox, a one drive y a cualquier otro sitio que se os ocurra. Lo copiais también de las descargas a la carpeta en la que habéis estado trabajando, donde teneis la clave y el CSR.

10. Convertimos el certificado descargado con extensión .cer a extensión .pem usando este comando:

C:/OpenSSL-Win32/bin/openssl x509 -in ios_development.cer -inform DER -out ios_developer.pem -outform PEM

11. Exportamos el certificado para poder usarlo en phonegap build con el siguiente comando:

C:/OpenSSL-Win32/bin/openssl pkcs12 -export -inkey miclave.key -in ios_developer.pem -out iphone_development.p12

nos pedirá una contraseña para exportar, también nos la pedirá en phonegap build para importarla, asi que no la olvidéis.

12. Creamos un App ID:
Volvemos a la web de apple y pinchamos en App IDs, pinchamos en el botón + y rellenamos los datos de la app. Solo hay que rellenar el bundle id, que es el id de la aplicación, en este caso he usado com.jcesarmobile.helloworld

13. Creamos el provisioning profile:
Seguimos en la web de apple, allí pinchamos en provisioning profile -> development botón + -> “iOS App Development” y “Continue”
Seleccionamos en el desplegable el App ID que creamos en el punto 12 y pinchamos en “Continue”
Marcamos el checkbox del certificado de desarrollo y pinchamos en “Continue”
Seleccionamos todos los dispositivos en los que queremos que se pueda instalar la app y pulsas “Continue” (si no te sale ninguno es porque tienes que haberlos dado de alta en el apartado “Devices” anteriormente)
Finalmente ponemos un nombre al profile y pinchamos en “Generate”, cuando se haya generado lo descargamos pinchando en “Download”

Y ya está, ya hemos terminado el proceso de generar el certificado y el provisioning profile para poder probar nuestra aplicación en nuestro dispositivo iOS, compilandolo desde phonegap build sin necesidad de usar un mac.

Para usarlo tan solo tenémos que ir a la web de phonegap build, entrais en vuestro perfil y en el apartado Signing Keys os permite subirlos. Cuando lo hagais os saldrá al lado un candado cerrado, pincha en él y pon el password con el que exportaste el certificado (en el paso 11). El candado se abrirá y ya podrás usarlo para firmar tus aplicaciomes.

Posibles errores.
Si en alguno de los pasos nos sale el error “unable to write ‘random state'”, hay que abrir el CMD ejecutandolo como administrador.

62 comentarios en “¿Como crear certificado iOS para phonegap build desde windows?

  1. Hola Cesar.
    Hace un tiempo te envié unos tutos, no sé si te acuerdas… quería preguntarte por los royalties ;p Es coña!!
    Es que estoy intentando seguir este tutorial y tengo un par de problemas:
    1) En el punto 5 cuando poner CertificateSigningRequest.certSigningRequest, eso es el nombre del archivo que se crea, ¿no?
    2) La dirección para el certificado de apple https://developer.apple.com/account/ios/certificate/certificateList.action me dice que no tengo privilegios para acceder ahí… no sé si tiene que ver con la licencia de desarrollador, pero la he comprado y sigo sin tener permisos.

    Gracias.

    1. vale… parece ser que tenía que esperar un tiempo que se actualizara el id de apple y se me vinculara con un rol de desarrollador… he recibido un mail hace un segundo, he probado y ya podía.
      Gracias.

  2. Hola, en este momento tengo dicho problema, intenté descargar del link que mencionas “http://slproweb.com/download/Win32OpenSSL_Light-1_0_2.exe”
    y no se encuentra la página

    Te agradecería si actualizas dicho link

    1. Actualizado.
      Gracias por avisar!
      He puesto también en link a la página con todas las descargas disponibles de OpenSSL por si sacan una nueva versión y vuelve a dejar de funcionar

      1. Esa versión es muy vieja, he actualizado el link a la pagina oficial y la última versión 1.1.0, además que hoy en día no me fío ya mucho de sourceforge, a la minima te meten mierda en los instaladores.

  3. Hola mi pc funciona con win64 bit por ende descargue el openssl64, cuando estoy en el prompt no puedo crear la clave y tampoco puedo acceder a la pagina de apple.

    1. Mi sistema operativo es de 64 bits, pero me bajé la versión de 32 bits de openssl y funciona perfectamente, prueba con ese a ver. A que página de apple no puedes acceder?

  4. Excelente ayuda, es posible crear el certificado sin pagar el registro de desarrollador Ios? estaría bueno que lo aclares en el post también, muchas gracias, buena info.

    1. El certificado es para poder publicar las aplicaciones en la app store, y para publicarlas hay que pagar si o si. Si lo que quieres es poder probar las apps en tus dispositivos sin registrarte como desarrollador, al parecer, desde que han sacado Xcode 7 ya es posible, pero no se como irá el tema de certificados si lo compilas en phonegap build

      1. Muchas gracias por responderme rápido, necesito compilar para Ios para que lo pruebe un cliente en su iPhone, luego si funciona bien se subirá a la appstore, tengo el apk en Android en la playstore me falta este último paso, algunos recomiendan rentar un Mc in cloud, pero vi que en PhoneGap Build se puede compilar en la nube, si puedo compilar sin Mac y todo desde Windows o al menos generar el ipa para que lo prueben antes de subir a la appstore seria genial.

        1. Si, si usas phonegap build puedes compilar sin un mac, pero necesitas la cuenta de desarrollador. Para que lo puedan probar tienes que generar un certificado ad-hoc en el que hayas dado de alta los ids de los dispositivos del cliente, y eso solo se puede hacer si tienes la cuenta de desarrollador.

  5. Hola,

    Todo salió muy bien en el proceso de exportación de certificados, quedó desbloqueado el “build” IOS, pero aparece este error: “Error – Unable to import Certificate”.

    En la documentación recomiendan volver a realizar el proceso de subida con las credenciales adecuadas, pero sucede lo mismo cada vez que realizo el procedimiento.
    (La clave que siministro es la que asigné en “miclave.key”).

    Gracias

  6. Hola JCesar. Hasta que llegué al punto 11, sin problema. Al ejecutar el 11 me pone:

    No certificate matches private key unable to write ‘random state’

    parece que no coincide alguna clave. He seguido los pasos. En el punto 4 hay que poner alguna clave? Donde y cual?
    Gracias por estos tutoriales tan útiles. Un saludo desde León

    1. No, en el punto 4 no hay que poner ninguna clave, creas el fichero que es la clave (“miclave.key”). Revisare el tutorial cuando tenga un ordenador con windows. Estas ejecutando el CMD como administrador? prueba a hacerlo asi.

    2. A mi me salía ee error “No certificate matches private key” y se ha solucionando añadiendo al final de la linea: -nodes -nocerts
      Quedando así la última instrucción:
      C:/OpenSSL-Win32/bin/openssl pkcs12 -export -inkey miclave.key -in ios_developer.pem -out iphone_development.p12 -nodes -nocerts

        1. Gracias Adri por responder. Me pasa lo que a ti. El phonegap build me dice:
          Unable to import certificate
          Cuál será el motivo? He seguido todos los pasos y no soy capaz.
          A ver si JCesar nos lo soluciona. Gracias a los dos.
          Un saludo
          Anuska

          1. Acabo de repetir el tutorial paso por paso y no he tenido ningún problema al importarlo en phonegap build. Si estáis en windows 10 o véis algún error al ejecutar cualquiera de los comandos de SSL, repetid todo pero al abrir la ventada de CMD hacedlo con click derecho y “Ejecutar como administrador”

  7. Y aseguraos de que el que subís a phonegap build es el iphone_development.p12, os saldrá con un candado que tendréis que desbloquear pinchando en él y poniendo la clave que pusierais en el paso 11

    1. Hola JCesar. Ya seguí paso por paso tus explicaciones y lo conseguí. Ahora tengo otro problema que no sé por qué será: A la hora de instalar la aplicaciones en un iphone4 me da el error:
      “Imposible descargar la app
      PRUEBA no se puede instalar en estos momentos”
      Cuál puede ser el problema?. A la hora de compilar no me dio errores. Gracias y un saludo

      Anuska

      1. En el punto 13 hay un paso en el que tienes que añadir los dispositivos en los que se puede instalar. ¿Estaba tu iPhone 4 en esa lista?
        Si lo estaba, ¿Que versión de iOS tiene tu iPhone 4?¿Que versión del CLI usaste en phonegap build?

        1. Hola JCesar de nuevo. Qué rapidez. Muchas gracias porque estoy un poco desesperada.
          Mi iPhone4 si está en la lista del punto 13 pero es gracioso que me sale en iPod Touch. Yo meto el udid pero se me coloca ahi. Será ese el problema? Mis versiones:
          iOS 7.1.2
          Phonegap cli-5.2.0 (3.9.1 / 4.1.1 / 3.8.1)

          Gracias y un saludo desde León,

          Anuska

  8. Pues si, puede ser ese el problema, es muy raro que un iPhone 4 te lo ponga como iPod Touch. De donde has sacado el udid?

    Lo otro está correcto, te preguntaba las versiones porque en cordova-ios 4 ya no se soporta iOS 7, pero tu estás usando la 3.9.1 que todavía lo soporta

    1. El udid lo saqué conectando el iPhone a un mac y el itunes me lo dio. En un windows puedo mirarlo?
      Perdon por la guerra que te doy. Gracias de nuevo JCesar y un saludo.

      1. En windows es igual, conectas el iphone al equipo, abres itunes, le das al simbolito del telefono que hay en la parte superior, y luego a resumen y cuando pulses en el numero de serie cambia el texto y aparece el udid

    1. Yupiiiii. Gracias chicos. Lo conseguí. El udid estaba mal. Puse un 8 y era una B. Menuda tontería y me traía loca.
      Supongo que cuando la gente se baje mi app (los devices no estarán registrados) del app store funcionará, no?. Para probarla con el QR del phonegap, tengo que registrarlos todos? Menudo rollo pedirle el udid a todos los que la prueben ………
      Gracias y un saludo
      Anuska

      1. jajaja, en estos casos siempre hay que copiar y pegar para no tener estos errores.

        Cuando creas la app con un certificado de distribución y un provisioning profile de distribución no se te preguntan los dispositivos. El .ipa que se genera lo subes a itunes connect y allí puedes usar Test Flight para enviarsela a testers sin que tengan que darte el udid.
        Pero si quieres que se la instalen desde phonegap build escaneando el QR entonces si te tendrán que pasar el udid y tu añadirlo en la página de desarrollador de apple y generar un nuevo provisioning profile añadiendo ese dispositivo.

        1. Madre que lío: .ipa, itunes connect, Test Flight………
          El IOS me pilla de nuevo. Ya luché con Android bastante y me pilla cansada.
          Ji Ji.
          De nuevo gracias JCesar. Espero no darte mucho más guerra.
          Anuska

        2. Hola de nuevo, no soy capaz de que varios dispositivos apple prueban mi app (sin subirla al AppSore porque está en desarrollo) sin registrar el device. Me podrías decir el proceso?
          Gracias de antemano
          Un saludo

          Anuska

          1. Si no quieres registrar los dispositivos tienes que usar TestFlight, desde Itunes Connect (https://itunesconnect.apple.com). Ahí creas tu app y te aparecerá la pestaña TestFlight dentro de tu app para que gestiones los testers. Es como subirla a la App Store pero sin llegar a publicarla

  9. Buenas a ver si alguien me puede echar una mano, he conseguido ya descargar el ipa e instalar en el iphone, pero ahora no me funciona nada de jquery, tengo eventos de submit, click, change o load para cargar contenido php del servidor, pero en el iphone no me detecta nada, mientras en android funciona todo de maravilla, alguien sabe a que puede deberse o como solucionarlo.

    Muchas gracias

  10. Esto ya sin ver el proyecto es mas complicado responder, crea una pregunta en stackoverflow (en la versión inglesa o española) dando mas detalles y pon el link para que eche un ojo

  11. Buenas,
    Estoy utilizando windows 10, pero he descargado la version de 32bit de OpenSSL.

    No consigo crear el certificado en el paso 5.

    En el paso 4 recibo una respuesta del cmd diciendo:
    Generating RSA private key, 2048 bit long modulus
    …+++
    ………………………..+++
    e is 65537 (0x10001)

    Después inserto el comando cambiando mi email y nombre y no pasa nada.

    Gracias.

  12. Si al final se creó y pude completar todos los pasos, pero Phonegap build no me admitia el certificado .p12.
    Al final lo he hecho con un mac y lo he conseguido.
    Gracias.

  13. Buenos días Cesar!!, y enhorabuena excelente entrada. Mi pregunta es la siguiente
    Con respecto a las Notificaciones Push, que pasos habría que seguir
    Gracias

    1. Pues nunca he probado a hacerlo para certificados de notificaciones push, pero debería ser parecido.

      En la página de desarrolladores de apple creas el App ID de la app en la que quieras poner push si aún no lo has creado, pinchas en el para que se despliegue la información y haces click en Edit. Te saldrá el listado de todas las características de la app y en el apartado de Push Notifications tendrás un botón Create Certificate, pinchas y aquí el proceso será igual que en el tutorial, creas el CSR, descargas el certificado .cer y lo conviertes a .p12

    1. Para poder poner las apps en la App Store si, tienes que pagar anualmente. La página te redirecciona al hacer login? o directamente al pulsar? a mi me lleva a la página de login y al meter mis datos me lleva al apartado de certificados, si no tienes cuenta de pago no puedes crear certificados, por lo que supongo que te redireccionará a la página de bienvenida

  14. Buen dia
    tengo un app con phonegap y no eh podido sacar mi certificado para ios por queno tengo como pagarla. no hay forma de sacar los certificados sin pago? solo es para saber si compila bien la app en ios

  15. Mi consulta es similar a las otras…necesito poder hacer un demo para el cliente…pero quiero hacerlo con el compilado Generado por phone Gap:
    1- Podre hacer y que el cliente instale el app, sin realizar el pago los 100 dolares??? Seguramente lo hare pero luego de que el cliente de el ok.
    2- el Certificado requerido por phoneGap, podre generarlo sin realizar el pago…

    Espero sus comentarios, Muchas gracias.

    1. No, para crear un certificado válido tienes que tener una cuenta de pago.
      Con una cuenta gratuita sólo podrías instalar las apps desde el propio Xcode conectando por cable, pero no desde Phonegap build

  16. Disculpa al compilar la app para ios me sale este error

    Certificate doesn’t match profile: The default keychain doesn’t have an identity matching

    A que crees que se deba?

      1. segun yo si, pero ahora que lo mencionas me entro la duda, seguire haciendo pruebas y tendre cuidado en ese paso, alguna otra cosa que pudiera causar ese error?

        y muchas gracias, me gusto mucho el tutorial, tambien gracias por darte el tiempo de responder las dudas

        1. Otra duda que no se si me puedas ayudar, es que he intentado crear todo desde MAC pero siempre me sale este error al compilar

          Error – the password for the associated certificate is incorrect

          He intentado varias veces, poniendo cuidado en cada paso con la contraseña.

          Como sale ese error intente hacerlo desde pc con openssl pero tampoco me funciono

          No se si influya que el correo de la cuenta de developer.apple es diferente al correo en el que tengo mi cuenta de build.phonegap

          1. Lo del password te lo dice Phonegap Build? Cuando importas el certificado te sale un candado cerrado, tienes que hacer click en él para poner el password que usaras para exportar el certificado de tu ordenador.

        2. Pues justo el lunes me pasó lo mismo, subí un nuevo certificado y provisioning profile (generados desde mac). El certificado era de desarrollo y el provisioning profile lo generé para la app id * (para que valga para todas las apps de desarrollo). Luego generé un certificado nuevo de distribución y el provisioning profile específico para la app que quería compilar y si me funcionó. No se muy bien por que sería, a lo mejor no seleccioné el certificado de desarrollo bueno al generar el provisioning profile. Ante la duda, repite los pasos y asegúrate de que al generar el provisioning profile seleccionas el certificado correcto, puedes seleccionar todos los disponibles para evitar errores.

  17. Estoy en Windows 7 x86, generé el certificado, ¿Es necesario crear el provisioning profile para poder compilar desce la linea de comandos?, ¿O será el error dado a la arquitectura de mi máquina? porque me aparece el error: “You may not have the required environment or OS to build this project”. Cabe hacer mención que el mensaje de error es distinto al que obtenía antes de generar el certificado y guardarlo en la carpeta que especificas. De antemano gracias.

    1. Los certificados y provisioning profiles son para usarlos en Phonegap Build o algún servicio similar de compilación en la nube, no se pueden compilar app iOS desde Windows.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *