batch_ios_build.sh が動作しない!

導入

ZehtaApps では、日本の国家試験対策アプリ 53本を Unity で管理しています。毎回手動でビルド・App Store Connect にアップロードするのは現実的ではないので、バッチで自動化していました。


先日、シェルスクリプト版のバッチ(batch_ios_build.sh)を使おうとしましたが、途中で Unity が強制終了してしまい、最後まで走りませんでした。


原因を調べてみると、Unity を「バッチモード」という自動実行モードで起動したとき、macOS 26.5.1 の署名検証が Unity 内部の特定のライブラリを「不正」と判定し、強制的にプロセスを終了させてしまうこと。GUI(対話モード)で Unity を起動した場合はこの問題が発生しません。

つまり:

  • シェルバッチ-batchmode)→ macOS が途中で Unityを殺す → 完走できない
  • GUI バッチ(Unity Editor 内のメニュー)→ 対話モードなので署名検証を通る → 完走できる

結論として、このプロジェクトは macOS 26 環境ではシェルバッチは使えず、Unity Editor 上のボタンから「Batch iOS Build」を起動する方式に限定されます。


これは Unity / Apple / macOS の相互作用の問題で、個別のコードでは対処できない環境制約です。


仕方がないので、GUI(対話モード)を整備していくことにしました。


問題1: ビルドが止まる

GUIバッチでビルドを開始すると、途中で止まってしまう。ログを追うと、Unityの定義シンボルが毎回上書きされていた。Easy Save 3 というアセットの必須フラグが毎ビルド消されて再度追加される→ 再コンパイル→ ドメインリロード という無限ループ。Unity 側のコードが知らず知らずのうちに、必要な定義シンボルを削除していたのが原因でした。


修正: 定義シンボルの操作を「必要なら追加」「削除してはいけない」という条件付きに変更。これで無限ループが止まりました。


問題2: 証明書がバラバラ

App Store にアップロードするには、Apple の署名証明書が必要です。気づかないうちに 3 つの証明書がキーチェーンに混在していました。古いものも新しいものも、あるいは失効したものもまとめて存在。Xcode が「どの証明書を使えばいいの?」と困っていました。


修正: 新しい 1 つの証明書だけを残し、古い 2 つを削除。証明書を一本化。


問題3: プロビジョニングプロファイルが見つからない

Xcode でバッファーするプロビジョニングプロファイルが 360 個以上あり、大半は 2025 年のもので使えないゴミでした。削除して整理。


問題4: API キーの権限が足りない

コマンドラインでプロビジョニングプロファイルを自動生成しようとしても失敗。原因は API キーの権限が「App Manager」だったこと。プロファイル生成には「Admin」権限が必要でした。


修正: 新しい Admin 権限の API キーを App Store Connect で作成し、コード内の古いキーを差し替え。


教訓

  • ビルドシステムは定期的に「本当に動いているか」確認する。無言で破壊されていることがある
  • 証明書・キーは「複数あると困る」。常に整理
  • API キーの権限は、やりたい作業に応じて正しく設定すること。足りないと壁にぶつかる
  • エラーメッセージは正確。「No profiles found」なら実は「キーの権限不足」だったりする
  • macOSのアップデートは慎重の上にも慎重に…