Un breve tutorial explicando como configurar y montar un entorno de desarrollo para compilar y empaquetar para iOS de manera remota en Unreal Engine 4 (v4.22+), para realizar pruebas, sin invertir dinero ni tiempo en la licencia de desarrollador para iOS.
Creando los archivos de aprovisinamiento
Configuración remota del proyecto para iOS
Mobileprovision tester
Creando los archivos de aprovisionamiento
El primer pase será crear los dos archivos necesarios para firmar el IPA: el mobileprovision y el certificado. Para poder crear estos ficheros es necesario un sistema operativo OS X, este método funciona tanto en una máquina Mac como en entornos virtualizados, solo necesitamos el sistema operativo.
Para este tutorial estamos utilizando macOS Mojave 10.14.6 y Xcode 11.1
Creando un certificado self-signed (auto-firmado)
Empezamos creando un certificado para la firma de código. En el entorno Mac OS vamos a Aplicaciones > Utilidades > Acceso a LLaveros
Selecciona Inicio de sesión y Mis Certificados
En el Menu superior Acceso a llaveros > Asistente para Certificados > Crear un certificado…
Ahora tenemos que rellenar la información del certificado
- Nombre: Debe empezar con la cadena «iPhone Developer», después podemos añadirle más información como el nombre de la compañía
- Tipo de identidad: «Raiz autofirmada»
- Tipo de certificado: «Firma en código»
- Marcamos «Permitir ignorar los valores por omisión»
Hacemos click en Continuar
Ahora definimos el periodo de validez del certificado. Vamos a establecer un periodo de 10 años (3652 días).
En el siguiente formulario solo necesitamos rellenar el campo de la Unidad organizativa.
Podemos dejar el siguiente formulario con las opciones por defecto.
En Extensión de uso de claves marcamos:
- Firma
- Firma de certificados
En Extensión uso de clave extendida marcamos:
- Cualquiera
- Protección de correo electrónico
- Firma de código
Podemos continuar hasta el final del proceso con las opcones por defecto.
Ahora en Mis Certificados aparece el nuevo certificado auot-firmado. Copiamos el valor de la fecha de caducidad, la necesitaremos mas adelante.
Nuestro certificado esta listo, ahora necesitamos crear el archivos de aprovisionamiento movil (mobileprovision).
Creando el archivo de aprovisionamiento móvil
Ante de ponernos a crear el plist necesitamos el certificado anterior en formato PEM Privacy-Enhanced Mail. Para ello abrimos un terminal y ejecutamos:
security find-certificate -c «iPhone Developer: com.yourcompany» -p
Ahora ya podemos crear el provision.plist que configurará la creación del archivo de aprovisionamiento final.
Aqui tenemos una plantilla para nuestro plist que podemos usar:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>AppIDName</key> <string>selfsigned: any app</string> <key>ApplicationIdentifierPrefix</key> <array> <string>com.yourcompany</string> </array> <key>CreationDate</key> <date>2019-09-07T18:01:13Z</date> <key>Platform</key> <array> <string>iOS</string> </array> <key>IsXcodeManaged</key> <false/> <key>DeveloperCertificates</key> <array> <data>MIIDWzCCAkOgAwIBAgIBATANBgkqhkiG9w0BAQsFADBTMSowKAYDVQQDDCFpUGhvbmUgRGV2ZWxvcGVyOiBjb20ueW91cmNvbXBhbnkxGDAWBgNVBAsMD2NvbS55b3VyY29tcGFueTELMAkGA1UEBhMCVVMwHhcNMTkwOTA4MTYwMTEzWhcNMjkwOTA3MTYwMTEzWjBTMSowKAYDVQQDDCFpUGhvbmUgRGV2ZWxvcGVyOiBjb20ueW91cmNvbXBhbnkxGDAWBgNVBAsMD2NvbS55b3VyY29tcGFueTELMAkGA1UEBhMCVVMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDLjHB8gxEW33gva4ei3TdW3J4RrJ46U2okexJP9EhvxtJSaGz2vEm/jv1May/lUITnmBkJtywSe8RAaSggLcWHvzx6m3W7Yrw1C6zzRqr1VvLtO2d2E0/GqsztdfbT4Hwsw47i8DILYQT45ujDsLqfTa8TViiD2/O1KwbeLqMXU1I8LJbP0QQsoeuOJshCiADe3b7+15P+hecZvk/SpanRfSVV70y3UBJd7ZWu4ZoVuieXTEp6QcTh32oxLd+RGNm0fRUfQWGDWRsINK/uehLj4JaAmZ5wKH2RTgkghAoSKQqzeZlq9JI+1a0JPvaLWbsLSnCAi6Ju+LXo1ksap7ubAgMBAAGjOjA4MA4GA1UdDwEB/wQEAwIChDAmBgNVHSUBAf8EHDAaBggrBgEFBQcDBAYIKwYBBQUHAwMGBFUdJQAwDQYJKoZIhvcNAQELBQADggEBAHSR2eGDR+5iPQh7NMTUcqVwQ3hup1B5OSwrZme1QzE7j3GinEQmEfAwTCRwHbAg1E0O7FATUj5KhOTE/6XS8bWqYFKugOalLODf6z1BrgSYNarejSPGcqK6gEMpct0x2dhVTLiXf+m7aH15L/26DwmNUne/VMLDpj0nF1iBsbKRVsx5sQ97tcuIrG2IocaNEFHH7mi0uaQ1WSa+EoHR3nOqbpiSpZFWpVmNMz4yTpOZhCZzpMr8AEcA0H/+b12QFfmHhCVr7CRooStlGmgIHXs0M2jc4L78/xAVC03bwIyM2olm3MAwI033Gv6vNx+m5XkcTcrm+V4DsRA02oTo5W4=</data> </array> <key>Entitlements</key> <dict> <key>keychain-access-groups</key> <array> <string>com.yourcompany.*</string> </array> <key>get-task-allow</key> <true/> <key>application-identifier</key> <string>com.yourcompany.*</string> <key>com.apple.developer.associated-domains</key> <string>*</string> <key>com.apple.developer.team-identifier</key> <string>com.yourcompany</string> <key>aps-environment</key> <string>development</string> </dict> <key>ExpirationDate</key> <date>2029-09-07T18:01:13Z</date> <key>Name</key> <string>Self Signed Provisioning Profile</string> <key>ProvisionedDevices</key> <array> <string>49d262568f2b366fc4c09b5b25354f63d6b2a5b2</string> </array> <key>LocalProvision</key> <true/> <key>TeamIdentifier</key> <array> <string>com.yourcompany</string> </array> <key>TeamName</key> <string>com.yourcompany</string> <key>TimeToLive</key> <integer>3652</integer> <key>UUID</key> <string>B5A2908D-D6EE-476E-AF18-D99AE14684AA</string> <key>Version</key> <integer>1</integer> </dict> </plist>
Valores que tendremos que cambiar:
- Nombre de compañia, grupos, equipos: utilizaremos el mismo que pusimos en la unidad organizativa del certificado (com.yourcompany), sin olvidarnos de los wildcards alli donde aparezcan.
- CreationDate, ExpirationDate, TimeToLive: Las mismas fechas que las utilizadas en el certificado autofirmado.
- DeveloperCertificates: El certificado en formato PEM que obtuvimos en la terminal.
- ProvisionedDevices: Si tienes un dispositivo para realizar pruebas puedas añadirlo en esta seccion.
- Name: El nombre que aparecerá luego en el listado de los perfiles de aprovisionamiento móvil.
Ahora volvemos a Acceso a LLaveros y exportamos el certificado en formato p12
Le ponemos un nombre y en Formato de archivo le ponemos Intercambio de información personal (.p12)
Se nos solicitará una contraseña para proteger el acceso a este fichero, esta contraseña la necesitaremos en los siguientes pasos. Y con esto obtenemos el certificado en un archivo SelftsignedCert.p12.
Ahora necesitamos una version de OpenSSL con soporte para cms.
openssl:Error: ‘cms’ is an invalid command.
La versión de Openssl incluida en OS X tiene desactivado el soporte CMS. Para habilitarlo habría que compilar nuestra propia version de Openssl
Podemos compilarla en mac utilizando el codigo fuento del repositorio de Openssl y añadiendo enable-cms en las opciones de configuración, o podemos utilizar la versión de otras plataformas que ya lo tengas habilitado por defecto, como por ejemplo la de Windows.
(Yo ya tengo openssl con soporte cms instalado en mi plataforma Windows asi que voy a copiar el SelftsignedCert.p12 y continuar el resto del tutorial utilizando esta version, pero el proceso debería funcionar en Mac también)
Abrimos una ventana de comandos y ejecutamos :
openssl pkcs12 -in SelfsignedCert.p12 -out SelfsignedCert.pem -nodes
Nos pedirá la contraseña del certificado .p12. Con esto conseguimos el archivo SelfsignedCert.pem
En la misma ventana de comandos podemos ejecutar:
openssl cms -sign -nodetach -in provision.plist -out Selfsigned.mobileprovision -signer SelfsignedCert.pem -outform DER
Y finalmente hemos conseguido el Selfsigned.mobileprovision
Con estos dos archivos ahora podemos ir a nuestro proyecto de Unreal Engine 4 y configurar la compilación y el empaquetado remoto para iOS :
- Selfsigned.p12
- Selfsigned.mobileprovision
Parte 2: Configuración remota del proyecto para iOS
2020/10/06 – Updated to macOS 10.14.6 and Xcode 11.1
Ayudanos con este blog!
El último año he estado dedicando cada vez más tiempo a la creación de tutoriales, en su mayoria sobre desarrollo de videojuegos. Si crees que estos posts te han ayudado de alguna manera o incluso inspirado, por favor considera ayudarnos a mantener este blog con alguna de estas opciones. Gracias por hacerlo posible!