Cross-compiling for iOS on Linux
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, a says 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.
XCode with the iOS SDK (a dmg image)
for your development machine installed and in the . It has to be version >= 3.5 to target
arm64
architecture.darling-dmg, which needs to be built from source. The procedure for that is explained below.
- For building darling-dmg, you’ll need the development packages of the following libraries: fuse, icu, openssl, zlib, bzip2.
-
- This also has some extra dependencies: automake, autogen, libtool.
Clone the repository on your machine:
Build it:
$ 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 ../..
Mount the XCode image:
[...]
Everything looks OK, disk mounted
Extract the iOS SDK:
Pack the SDK:
$ cd iPhoneSDK
$ tar -cf - * | xz -9 -c - > iPhoneOS9.1.sdk.tar.xz
$ git clone https://github.com/tpoechtrager/cctools-port.git
$ cd cctools-port/usage_examples/ios_toolchain
$ ./build.sh /path/iPhoneOS9.1.sdk.tar.xz arm64
Copy the tools to a nicer place. Note that the SCons scripts for building will look under usr/bin
inside the directory you provide for the toolchain binaries, so you must copy to such subdirectory, akin to the following commands:
Now you should have the iOS toolchain binaries in .
Once you’ve done the above steps, you should keep two things in your environment: the built toolchain and the iPhoneOS SDK directory. Those can stay anywhere you want since you have to provide their paths to the SCons build command.
For the iPhone platform to be detected, you need the OSXCROSS_IOS
environment variable defined to anything.
$ export OSXCROSS_IOS=anything
Now you can compile for iPhone using SCons like the standard Godot way, with some additional arguments to provide the correct paths:
$ scons -j 4 platform=iphone arch=arm target=release_debug IPHONESDK="/path/to/iPhoneSDK" IPHONEPATH="/path/to/iostoolchain" ios_triple="arm-apple-darwin11-"
Then you will have iOS fat binaries in bin
directory.