Up to date

This page is up to date for Godot 4.3. 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 con el SDK de iOS (debe iniciar sesión en un ID de Apple para descargar Xcode).

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

  • xar y pbzx (necesarios para extraer el archivo .xip en el que viene Xcode).

    • Para construir xar y pbzx, es posible que desees seguir esta guía.

  • 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

Preparando el SDK

Extrae el archivo Xcode .xip que descargaste del sitio web de desarrolladores de Apple:

mkdir xcode
xar -xf /path/to/Xcode_X.x.xip -C xcode
pbzx -n Content | cpio -i

[...]
######### Blocks

Ten en cuenta que, para los comandos que se indican a continuación, tendrás que reemplazar la versión (x.x) por la versión del SDK de iOS que estés usando. Si no conoces la versión del SDK iPhone, puedes ver el archivo JSON dentro de Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs.

Extrayendo el SDK de iOS:

export IOS_SDK_VERSION="x.x"
mkdir -p iPhoneSDK/iPhoneOS${IOS_SDK_VERSION}.sdk
cp -r xcode/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/* iPhoneSDK/iPhoneOS${IOS_SDK_VERSION}.sdk
cp -r xcode/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/* iPhoneSDK/iPhoneOS${IOS_SDK_VERSION}.sdk/usr/include/c++
fusermount -u xcode

Empaquete el SDK para que cctools pueda usarlo:

cd iPhoneSDK
tar -cf - * | xz -9 -c - > iPhoneOS${IOS_SDK_VERSION}.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/iPhoneOS${IOS_SDK_VERSION}.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/iostoolchain/usr"
cp -r target/bin "$HOME/iostoolchain/usr/"

Now you should have the iOS toolchain binaries in $HOME/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 platform=ios arch=arm64 target=template_release IOS_SDK_PATH="/path/to/iPhoneSDK" IOS_TOOLCHAIN_PATH="/path/to/iostoolchain" ios_triple="arm-apple-darwin11-"