Up to date

This page is up to date for Godot 4.2. If you still find outdated information, please open an issue.

Compilación cruzada pra IOS en Linux

The procedure for this is somewhat complex and requires a lot of steps, but once you have the environment properly configured you can compile Godot for iOS anytime you want.

Descargo de responsabilidad

While it is possible to compile for iOS on a Linux environment, Apple is very restrictive about the tools to be used (especially hardware-wise), allowing pretty much only their products to be used for development. So this is not official. However, in 2010 Apple said they relaxed some of the App Store review guidelines to allow any tool to be used, as long as the resulting binary does not download any code, which means it should be OK to use the procedure described here and cross-compiling the binary.

Requerimientos

  • XCode with the iOS SDK (a dmg image, for newer versions a xip file is going to be downloaded.)

  • Clang >= 3.5 for your development machine installed and in the PATH. It has to be version >= 3.5 to target arm64 architecture.

  • Fuse for mounting and unmounting the dmg image.

  • darling-dmg, el cual debe ser construido desde el código fuente. El procedimiento para hacerlo se explica a continuación.

    • For newer versions you should download xar and pbzx.

    • Para compilar darling-dmg, necesitarás los paquetes de desarrollo de las siguientes bibliotecas: fuse, icu, openssl, zlib, bzip2.

    • For building xar and pbzx you may want to follow this guide.

  • cctools-port para las herramientas de construcción necesarias. El procedimiento de construcción es bastante particular y se describe a continuación.

    • Esto también tiene algunas dependencias adicionales: automake, autogen, libtool.

Configurando el entorno

darling-dmg

Clona el repositorio en tu máquina:

$ git clone https://github.com/darlinghq/darling-dmg.git

Compilalo:

$ cd darling-dmg
$ mkdir build
$ cd build
$ cmake .. -DCMAKE_BUILD_TYPE=Release
$ make -j 4  # The number is the amount of cores your processor has, for faster build
$ cd ../..

Preparando el SDK

Montando la Imagen XCode:

$ mkdir xcode
$ ./darling-dmg/build/darling-dmg /path/to/Xcode_7.1.1.dmg xcode
[...]
Everything looks OK, disk mounted

For newer versions you should extract the xip file:

$ mkdir xcode
$ xar -xf /path/to/Xcode_X.x.xip -C xcode
$ pbzx -n Content | cpio -i
[...]
######### Blocks

Note that for the commands below, you may need to replace the version (X.x) with whatever iOS SDK version you're using.

Extrayendo el SDK de iOS:

$ # If you don't know your iPhone SDK version you can see the json file inside of Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs
$ mkdir -p iPhoneSDK/iPhoneOSX.x.sdk
$ cp -r xcode/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/* iPhoneSDK/iPhoneOSX.x.sdk
$ cp -r xcode/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/* iPhoneSDK/iPhoneOSX.x.sdk/usr/include/c++
$ fusermount -u xcode  # unmount the image

Enpaqueta el SDK:

$ cd iPhoneSDK
$ tar -cf - * | xz -9 -c - > iPhoneOSX.x.sdk.tar.xz

Cadena de herramientas

Compila los cctools:

$ git clone https://github.com/tpoechtrager/cctools-port.git
$ cd cctools-port/usage_examples/ios_toolchain
$ ./build.sh /path/iPhoneOSX.x.sdk.tar.xz arm64

Copia las herramientas a un lugar más organizado. Ten en cuenta que los scripts de SCons para la construcción buscarán dentro de usr/bin en el directorio que proporciones para los binarios del conjunto de herramientas, por lo que debes copiar a un subdirectorio de esa forma, similar a los siguientes comandos:

$ mkdir -p /home/user/iostoolchain/usr
$ cp -r target/bin /home/user/iostoolchain/usr/

Ahora deberías tener los binarios del conjunto de herramientas para iOS en /home/user/iostoolchain/usr/bin.

Compilando Godot para iPhone

Una vez que hayas realizado los pasos anteriores, debes mantener dos cosas en tu entorno: el conjunto de herramientas construido y el directorio del SDK de iPhoneOS. Puedes ubicarlos donde desees, ya que deberás proporcionar las rutas de estos al comando de construcción de SCons.

Para que se detecte la plataforma de iPhone, es necesario que la variable de entorno OSXCROSS_IOS esté definida como cualquier valor.

$ export OSXCROSS_IOS=anything

Ahora puedes compilar para iPhone utilizando SCons de la misma manera que lo haces para Godot estándar, pero con algunos argumentos adicionales para proporcionar las rutas correctas:

$ scons -j 4 platform=ios arch=arm64 target=template_release IOS_SDK_PATH="/path/to/iPhoneSDK" IOS_TOOLCHAIN_PATH="/path/to/iostoolchain" ios_triple="arm-apple-darwin11-"