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.
Checking the stable version of the documentation...
在 Linux 平台上为 iOS 做交叉编译
这个流程稍微有点复杂,需要经历很多步骤。不过,一旦你把开发环境配置妥当,以后随时都可以轻松地为 iOS 编译 Godot 引擎了。
免责声明
虽然在 Linux 环境下为 iOS 进行编译是可行的,但苹果对开发所使用的工具(尤其是硬件方面)限制非常严格,基本上只允许使用自家的产品进行开发。因此,这种做法是 非官方 的。不过,苹果在 2010 年曾表示,他们放宽了一些 App Store review guidelines 的限制,允许使用任何工具进行开发,只要最终生成的二进制文件不下载任何代码即可。这意味着,使用这里描述的流程并交叉编译生成的二进制文件,理论上应该是没问题的。
需求
XCode 及 iOS SDK(登入 Apple ID 才能下载 Xcode)。
你的开发电脑上需要安装好 Clang 3.5 或更高版本( Clang >= 3.5 ),并且要确保它已经添加到了系统的
PATH环境变量中。另外,为了能顺利编译出arm64架构的程序,Clang 的版本必须不低于 3.5。xar 和 pbzx (这两个工具是用来解压 Xcode 所在的
.xip压缩包的)。如果要编译 xar 和 pbzx,你可以参考这份 指南:。
cctools-port 用于所需的构建工具. 构建过程非常特殊, 下面将进行描述.
这也有一些额外的依赖:automake,autogen,libtool.
配置环境
准备 SDK
解压你从苹果开发者网站下载的那个 .xip 文件:
mkdir xcode
xar -xf /path/to/Xcode_X.x.xip -C xcode
pbzx -n Content | cpio -i
[...]
######### Blocks
请注意,在运行下面的命令时,你需要把版本号(x.x)替换成你实际正在使用的 iOS SDK 版本。如果你不确定自己的 iPhone SDK 版本号是多少,可以打开 Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs 这个文件夹,查看里面的 JSON 文件来获取版本信息。
解压缩 iOS SDK:
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
打包 SDK,以便 cctools 能够使用它:
cd iPhoneSDK
tar -cf - * | xz -9 -c - > iPhoneOS${IOS_SDK_VERSION}.sdk.tar.xz
工具链
构建 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
将工具复制到更好的位置. 请注意, 用于构建的SCons脚本将在你为工具链二进制文件提供的目录中的 usr/bin 下查找, 因此, 你必须复制到这样的子目录, 类似于以下命令:
mkdir -p "$HOME/iostoolchain/usr"
cp -r target/bin "$HOME/iostoolchain/usr/"
现在,你应该能在 $HOME/iostoolchain/usr/bin 这个路径下看到 iOS 工具链的二进制文件了。
为 iPhone 编译 Godot
完成上述步骤后, 应在环境中保留两件事: 构建的工具链和iPhoneOS SDK目录. 那些可以留在你想要的任何地方, 因此你必须提供它们的路径给SCons构建命令.
为了检测 iPhone 平台,你需要将 OSXCROSS_IOS 环境变量定义为任意值 。
export OSXCROSS_IOS="anything"
现在你可以使用SCons像标准Godot方式一样编译iPhone, 带有一些其他参数以提供正确的路径:
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-"