📘

Godot の iOS カスタムテンプレートを作成して Xcode プロジェクトをエクスポートする

2023/10/13に公開

前回の記事では、Godot エディタをソースコードから macOS 向けにビルドする手順について記述しました。

今回は iOS 向けのカスタムテンプレートを作成して Xcode プロジェクトのエクスポートに使用する際の手順について記述します。

環境

MacBook Pro 13-inch M1 2020, macOS Ventura 13.6, Xcode 15.0

0. 標準のテンプレートの扱いを知る

まずは標準のテンプレートの扱いについて記述します。

標準のテンプレートは、macOS の場合 {ホームディレクトリ}/Library/Application\ Support/Godot/export_templates/ に配置されます。(os_macos.mm

export_templates ディレクトリ上には Godot エディタのバージョンに対応するファイルが配置されるようで、バージョン 4.1.1 Stable 版だと 4.1.1.stable が配置され、その中には色々なプラットフォーム向けのテンプレートファイルが格納されています。

テンプレートファイルの中身
テンプレートファイルの中身

ios.zip を解凍して中身を覗いてみましょう。

ios.zip の内容物
ios.zip の内容物

Xcode のプロジェクトファイルやビルド済みのフレームワークなどが配置されています。Godot エディタは、プロジェクトのエクスポート処理の中でzipファイルを解凍し、ファイルの書き換えやライブラリの配置などをしています。

iOS 向けに独自でテンプレートを用意するということは、自分で ios.zip を用意するということです。

1. カスタムテンプレートに配置するライブラリをビルドする

Compiling for iOS に従って必要なライブラリをビルドします。

ドキュメントに記載されているビルドは、実機用x2 (debug, release)、シミュレータ用x4 (x86_64 (debug, release), arm64 (debug, release)) の6種類です。

以下はライブラリのビルドのためのコマンドです。参考までに、本環境でそれぞれ初回のビルドにかかった時間を記載しています。

% scons platform=ios target=template_debug # 4m44sec
% scons platform=ios target=template_release # 4m18sec
% scons platform=ios target=template_debug ios_simulator=yes arch=x86_64 # 4m35sec
% scons platform=ios target=template_debug ios_simulator=yes arch=arm64 # 4m27sec
% scons platform=ios target=template_release ios_simulator=yes arch=x86_64 # 4m18sec
% scons platform=ios target=template_release ios_simulator=yes arch=arm64 # 4m14sec

これらのコマンドを実行して生成された成果物は bin ディレクトリに置かれます。

ビルドされたライブラリの一覧(libgodot.ios.template_ ではじまるファイル)
ビルドされたライブラリの一覧( libgodot.ios.template_ ではじまるファイル)

2. カスタムテンプレートに必要なファイルを配置する

標準のテンプレート ios.zip に含まれていたような、テンプレートに必要なファイルを配置していきます。といっても、カスタムテンプレートに必要なほとんどのファイルはリポジトリの misc ディレクトリの中に用意されています。

カスタムテンプレートの雛形が置かれている場所
カスタムテンプレートの雛形が置かれている場所

これをコピーして、先ほど作成したライブラリを配置します。シミュレータ用のライブラリについては、lipo コマンドで arm64, x86_64 向けのライブラリをまとめて Universal Binary を生成してから配置しています。

# 用意されている雛形をコピーする
% cp -r misc/dist/ios_xcode .

# 実機向けのライブラリを配置する
% cp bin/libgodot.ios.template_debug.arm64.a ios_xcode/libgodot.ios.debug.xcframework/ios-arm64/libgodot.a
% cp bin/libgodot.ios.template_release.arm64.a ios_xcode/libgodot.ios.release.xcframework/ios-arm64/libgodot.a

# シミュレータ向けのライブラリを配置する
% lipo -create bin/libgodot.ios.template_debug.arm64.simulator.a bin/libgodot.ios.template_debug.x86_64.simulator.a -output ios_xcode/libgodot.ios.debug.xcframework/ios-arm64_x86_64-simulator/libgodot.a 
% lipo -create bin/libgodot.ios.template_release.arm64.simulator.a bin/libgodot.ios.template_release.x86_64.simulator.a -output ios_xcode/libgodot.ios.release.xcframework/ios-arm64_x86_64-simulator/libgodot.a

ドキュメントによると、ビルドしたライブラリに加えて MoltenVK.xcframework を配置する必要があります。 ここでは、標準のテンプレートの中に含まれている MoltenVK.xcframework をコピーして使用することにしました。

The MoltenVK static .xcframework folder must also be placed in the ios_xcode folder once it has been created.

コピー後、必要なファイルを配置したテンプレート
コピー後、必要なファイルを配置したテンプレート

3. カスタムテンプレートを作成して使用する

ここまでに用意したファイルを zip にまとめてカスタムテンプレートを作成します。テンプレートを配置した親のフォルダではなく、ios_xcode の中身をまとめて zip にする必要があります。

zip にまとめる対象のファイル
zip にまとめる対象のファイル

Godot エディタからプロジェクトをエクスポートする際に、項目『カスタムテンプレート』に作成した zip ファイルへのパスを指定することによって、カスタムテンプレートを使用したプロジェクトのエクスポートをすることができます。

『カスタムテンプレート』に上記で作成したzipファイルのパスを指定する
『カスタムテンプレート』に上記で作成したzipファイルのパスを指定する

Discussion