Godot 4.3 で作ったゲームを App Store に出すまでを、Xcode の画面をほぼ開かずコマンドラインで回した。

結論から言うと通るが、Godot 固有の罠が多い。特に端末ファミリーの設定値は Godot 独自の意味を持っていて、間違えると審査提出の段階で詰まる。

実際にストアまで出した手順と、ハマった順に罠を書く。

Godot 4.3 で作ったゲームを App Store に出すまでを、Xcode の画面をほぼ開かずコマンドラインで回した。実際にストアまで出した手順と、ハマった順に罠を書く。

基本の流れ

  1. export_presets.cfg を整備
  2. Godot --headless --export-release "iOS" で Xcode プロジェクトを書き出し
  3. xcodebuild archive → xcodebuild -exportArchive (method=app-store)
  4. altool --upload-app でアップロード

罠 1: targeted_device_family は Godot 独自の値

export_presets.cfg の targeted_device_family は 0=iPhone / 1=iPad / 2=両方。Apple の UIDeviceFamily の感覚で 1 を入れると iPad 専用ビルドになり、App Store Connect が iPad Pro 12.9 のスクリーンショットを必須にしてきて提出が 409 で詰まる。

iPhone 縦持ちゲームなら 0。書き出し後に Info.plist の UIDeviceFamily が [1] になっているか確認するのが確実。

罠 2: 自動署名のままでは配布 archive が絶対に作れない

CODE_SIGN_STYLE が Automatic のまま archive すると conflicting provisioning で必ず落ちる。配布は手動署名をフラグで明示する:

  • CODE_SIGN_STYLE=Manual
  • CODE_SIGN_IDENTITY="Apple Distribution"
  • PROVISIONING_PROFILE_SPECIFIER="<配布用プロファイル名>"

別の作品では署名を全部切って素ビルドし (CODE_SIGNING_ALLOWED=NO)、後から codesign を手で当てる方式でも通った。

罠 3: レンダラーは gl_compatibility

Forward+ (Vulkan) は Intel Mac のシミュレータで起動すらしない。モバイル向けは gl_compatibility にしておくと手元の確認が楽。シミュレータ向けビルドは -arch x86_64 を明示しないとインストールに失敗する環境があった。

罠 4: 書き出すたびに Info.plist の掃除が要る

Godot の書き出しは、使っていない権限の UsageDescription を空文字で入れてくる。空のまま提出すると審査で落ちる要因になるので、書き出しのたびに除去をやり直す。スクリプト化しておかないと忘れる。

罠 5: 再アップロードは CFBundleVersion を上げる

同じ版番号で altool に投げると拒否される。再提出のたびに CFBundleVersion を +1。これも書き出しスクリプトに焼き込んでおくと事故らない。

まとめ

  • 端末ファミリーは 0=iPhone。書き出し後に UIDeviceFamily を確認
  • 配布 archive は手動署名の 3 点セットをフラグで明示
  • レンダラーは gl_compatibility、sim は x86_64 明示
  • UsageDescription の掃除と版番号 +1 はスクリプトに焼き込む

一度通せば 2 回目からは全部コマンド一発で回る。