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 編譯,但 Apple 對於所使用工具(特別是硬體)極為嚴格,幾乎只允許使用自家產品開發,因此此流程 並非官方方式。不過,Apple 在 2010 年曾表示,已放寬部分 App Store 審查方針,只要產生的二進位檔不會下載任何程式碼,即可使用任何工具。這代表本頁介紹的交叉編譯流程原則上可行。
系統需求
iOS SDK 版 Xcode (需登入 Apple ID 才能下載)。
Clang >= 3.5 ,安裝於開發主機並設定於
PATH中,版本需為 3.5 或以上才能支援arm64架構。xar 和 pbzx (用於解壓 Xcode 的
.xip封裝檔)。若需編譯 xar 與 pbzx,可參考 這份指南。
cctools-port (建置所需的工具)。建置流程較特別,說明如下。
此外還需額外安裝:automake、autogen、libtool。
設定開發環境
準備 SDK
請將從 Apple 開發者網站下載的 Xcode .xip 檔解壓縮:
mkdir xcode
xar -xf /path/to/Xcode_X.x.xip -C xcode
pbzx -n Content | cpio -i
[...]
######### Blocks
請注意,下方指令中的 x.x 需替換為你所使用的 iOS SDK 版本。如果不確定 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 工具鏈的二進位檔。
編譯 Godot 為 iPhone 版本
完成上述步驟後,請將已建置好的工具鏈與 iPhoneOS SDK 資料夾保存在開發環境中。這兩者可任意放置,只要在 SCons 編譯時提供正確路徑即可。
為讓 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-"