Godot 4.5のiPhoneアプリが終了時に落ちた。クラッシュログをAIに読ませて原因を絞った記録
何が起きたか
TestFlightに出したビルド(1.0(5))で、アプリを終了すると落ちる、という報告が出ました。起動中は普通に動きます。落ちるのは終わるときだけでした。
クラッシュログをAIに読ませた
実機のクラッシュログ(2026-11-07 20:45に読みました)で、落ちた所の呼び出しの並びは次のとおりです。
applicationWillTerminateapple_embedded_finishMain::cleanupGDScriptLanguage::finish- staticな変数の解放
- 自分自身を持つラムダ
UpdatableFuncPtrのmutex
終了の後片付けの途中で、ラムダが自分を持ったまま解放されて落ちている形です。ここまでは読めましたが、これが原因だと断定できる所までは確かめていません。
調べたこと
Godot 4.5の公式ソースと、関連するissue(#123712、#122899、#119857)を読みました。4.5のまま使える安全な「後片付けを省く方法」は見つかりませんでした。強制的に終了する案、メソッドを差し替える案、Godotの版を変える案は使わないことにしました。
直した所(1.0(6))
| 直した所 | 内容 |
|---|---|
| UIと広告の持ち方 | 値を持つラムダをやめ、普通のメソッドのCallableにした |
| 広告SDKの保持 | MobileAdsとUMPのstatic保持とsignalを、終了のときに外した |
| 終了の経路 | WM_CLOSEと_exit_treeから、何度呼んでも同じになる終了処理を呼ぶ |
対象の入力は全部で348箇所を点検しました。
試験の結果(Windows、Godot 4.5)
起動、編集、保存、読み戻し、抽選、終了までを、広告なしで50回、模擬広告ありで50回動かしました。クラッシュは0、スクリプトエラーも0で、75個のテストが通りました。
最初の100回の試験は、自分の保存先のフォルダ作成ミスで失敗しました。これは試験の側の間違いで、直してからやり直しています。
同じ症状は別のゲームのクラウドビルドでも出ました。書き出しが終わったあとにGodotを終了すると exit -6(Pure virtual function called!)で止まる、というものです(2026-11-07 21:21)。
未検証
未検証:iPhone実機でクラッシュが直ったかどうかは、まだ言えません。1.0(7)でタスクキルしたときは落ちた表示が出ませんでしたが、何回試したかの記録がありません。複数回の終了を確かめるまでは「直った」と書きません。