tutorial_remote_ios

en Tutoriales, UE4

Compilación remota iOS usando UE4

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

mac_keychain

Selecciona Inicio de sesión y Mis Certificados

mac_keychain_access

En el Menu superior Acceso a llaveros > Asistente para Certificados > Crear un certificado…

mac_create_certificate

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

mac_certificate_info

Ahora definimos el periodo de validez del certificado. Vamos a establecer un periodo de 10 años (3652 días).

mac_certificate_period

En el siguiente formulario solo necesitamos rellenar el campo de la Unidad organizativa.

mac_certificate_organization

Podemos dejar el siguiente formulario con las opciones por defecto.

mac_key_pair

En Extensión de uso de claves marcamos:

  • Firma
  • Firma de certificados
mac_certificate_key_usage

En Extensión uso de clave extendida marcamos:

  • Cualquiera
  • Protección de correo electrónico
  • Firma de código
mac_key_extended

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.

mac_my_certificates

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

mac_certificate_data

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

mac_certificate_export

Le ponemos un nombre y en Formato de archivo le ponemos Intercambio de información personal (.p12)

mac_certificate_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

win_openssl_cms

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
provision_files

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!

Escribe un comentario

Comentario