GodotアプリのiOSビルドを自動化しようとしたら少し苦戦した。
今までどうやっていたか
- GodotのプロジェクトのレポジトリとiOSアプリ用のレポジトリを分けて作成。
- iOSプロジェクトはバージョンアップ時にBundle versionを変更したり、プラグインを追加する際にプロジェクトを作り直したりする。
- Godot側でコードの変更をしたらpckファイルを書き出してiOSアプリ用のレポジトリにPushする。
- iOSアプリ用のレポジトリはXcode cloudとリンクされており、PushをトリガーにビルドがApp Store / TestFlightにアップロードされる。
この仕組みでそこまで不便はなかったが、しばらく使っていて下記のような不便さを感じるようになってきた。
- pckファイルの書き出し→iOSアプリ用レポジトリへのPushが面倒。特にコミットメッセージを書くのが面倒。
- GodotのレポジトリのコードとiOSアプリ用レポジトリのコードに不一致が起こりうる。
- 他プラットフォーム用ビルドを考慮した場合に、より上の問題が顕著になる。
そこで、Godot側のコードが変更されたら自動的にpckファイルを生成してiOS用のレポジトリにPushできないかを考えた。
どうやったら実現できたか
- Godot用のレポジトリにPushがあったらGitHub Actionsで、pckファイルの生成とiOSアプリ用のレポジトリへのPushをする。
- firebelley/godot-exportプラグインを使って、pckファイルを生成する。
- dmnemec/copy_file_to_another_repo_actionプラグインを使って、pckファイルをiOS用のレポジトリにPushする。
やることはシンプルにこれだけなのだが、はまるポイントがいくつかあって正常に動作できるようになるまで結構時間がかかった。
はまったポイント
pckファイルの書き出し
書き出しに失敗してもエラーにならない
- firebelley/godot-exportでは、下記のバイナリが適切でないなどの事情でエクスポートがうまくいかなかった場合でも、Stepとしてエラーにならず一見成功しているように見えてしまうケースがあった。
- その後のステップで成果物をうまく参照できない場合は、ログを参照してエクスポートでエラーが起きていないかをチェックする。
Godotの実行ファイルをどこからダウンロードすれば良いのかわからない。
- godot_executable_download_urlに何を指定すれば良いのかがよくわからなかった。
- firebelley/godot-exportのサンプルは https://downloads.tuxfamily.org/godotengine/4.0/Godot_v4.0-stable_linux.x86_64.zip という公式サイトとは別の場所から実行ファイルを持ってきている。
- Godot 4とGodot 3で、ヘッドレスモードで動かす方法が違うため、特にGodot 3でどのバイナリを使うべきかがよくわからなかった。
- 古いバージョンのReadmeに記載されたサンプルを見ると https://github.com/godotengine/godot/releases/download/3.4.4-stable/Godot_v3.4.4-stable_linux_headless.64.zip を使用しているようだったので、それに倣って設定したら動いた。
export_preset.cfgをコミットする
- Godot用のgitignoreテンプレートでexport_preset.cfgがIgnoreされる設定になっていた。(最新のテンプレートではIgnoreから外されている様子)
- firebelley/godot-exportでpckファイルを出力する際はexport_presetを指定する形になるので、ignoreから外してPushする必要があった。