Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

Cross-compilazione per iOS su Linux

La procedura per questo è un po' complessa e richiede molti passaggi, ma una volta configurato correttamente l'ambiente è possibile compilare Godot per iOS in qualsiasi momento.

Avvertenza

Sebbene sia possibile compilare per iOS in un ambiente Linux, Apple è molto restrittiva riguardo agli strumenti da utilizzare (soprattutto in termini di hardware), consentendo praticamente solo l'utilizzo dei propri prodotti per lo sviluppo. Quindi, questo non è ufficiale. Tuttavia, nel 2010 Apple ha dichiarato di aver rilassato alcune delle linee guida per la revisione dell'App Store per consentire l'utilizzo di qualsiasi strumento, purché il binario risultante non scarichi codice, il che significa che dovrebbe essere concesso utilizzare la procedura descritta qui e cross-compilare il binario.

Requisiti

  • XCode con l'SDK iOS (è necessario aver effettuato l'accesso con un ID Apple per scaricare Xcode).

  • Clang >= 3.5 per la propria macchina di sviluppo installata e nel percorso PATH. Deve essere una versione >= 3.5 per un'architettura arm64.

  • xar e pbzx (necessari per estrarre l'archivio .xip in cui si trova Xcode).

    • Per compilare xar e pbzx, si potrebbe seguire questa guida.

  • cctools-port per gli strumenti di compilazione necessari. La procedura di compilazione è piuttosto particolare ed è descritta di seguito.

    • Ciò presenta anche alcune dipendenze aggiuntive: automake, autogen, libtool.

Configurare l'ambiente

Preparare l'SDK

Estrarre il file Xcode .xip scaricato dal sito web degli sviluppatori Apple:

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

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

Si noti che per i comandi seguenti si dovrà sostituire la versione (x.x) con la versione dell'SDK iOS che si sta utilizzando. Se non si conosce la versione dell'SDK del tuo iPhone, si può vedere il file JSON all'interno di Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs.

Estrarre l'SDK 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

Comprimere l'SDK in modo che cctools possa utilizzarlo:

cd iPhoneSDK
tar -cf - * | xz -9 -c - > iPhoneOS${IOS_SDK_VERSION}.sdk.tar.xz

Toolchain

Compilare 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 gli strumenti in un posto più comodo. Nota che gli script di compilazione di SCons cercheranno in usr/bin all'interno della cartella specificata per i binari della toolchain, quindi è necessario copiare in tale sottocartella, in modo simile ai seguenti comandi:

mkdir -p "$HOME/iostoolchain/usr"
cp -r target/bin "$HOME/iostoolchain/usr/"

Ora si dovrebbero avere i binari della toolchain iOS in $HOME/iostoolchain/usr/bin.

Compilare Godot per iPhone

Una volta completati i passaggi precedenti, si dovrebbero mantenere due cose nel proprio ambiente: la toolchain compilata e la cartella dell'SDK di iPhoneOS. Questi possono rimanere dove si vuole, dato che bisogna fornire i loro percorsi al comando di build di SCons.

Per far si che la piattaforma iPhone sia rilevata, è necessario che la variabile d'ambiente OSXCROSS_IOS sia definita su qualsiasi valore.

export OSXCROSS_IOS="anything"

Ora è possibile compilare per iPhone utilizzando SCons come nella maniera standard di Godot, con alcuni argomenti aggiuntivi per fornire i percorsi corretti:

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-"