ANTIGRAVITY LABEN
記事一覧/アプリ開発
アプリ開発/2026-06-27上級

ローカルでは通る iOS ビルドが CI の TestFlight アップロードで署名拒否されるとき — match の証明書が静かにズレる原因と運用メモ

fastlane match を CI に載せると、ビルドは成功するのに TestFlight アップロードだけが署名エラーで落ちることがあります。証明書とプロファイルのズレを再現可能に診断し、readonly 運用と事前検証ゲートで止める手順を実機の挙動に沿って整理しました。

fastlane3matchiOS25コード署名CI/CD15TestFlight2App Store Connect2

プレミアム記事

「ビルドは緑なのにアップロードだけ赤」を最初に見たとき

CI のログを眺めていて、いちばん混乱したのがこの状態でした。build_app は最後まで通り、.ipa も生成されている。それなのに直後の upload_to_testflight だけが署名関連のエラーで落ちる。ローカルの Mac で同じコミットをビルドすると何事もなく TestFlight まで届く。

手元で再現しないバグほど厄介なものはありません。個人開発でアプリのリリースを自分一人で回していると、署名の更新を後回しにしがちで、そのツケが CI 側にだけ出ることがあります。私はこのとき、Antigravity に CI のログと Fastfile、Matchfile を渡して「ビルドは成功して .ipa があるのにアップロードだけ署名で落ちる。考えられる原因を、ビルド時の署名とアップロード時の検証の差から順に挙げてほしい」と尋ねるところから始めました。手を動かす前に、症状を「ビルド署名」と「配信側の検証」という二つの段に切り分けてくれたことで、闇雲にやり直す時間をかなり節約できました。

この記事は、その切り分けの結果として残った運用メモです。fastlane match を使っていて、ローカルと CI で署名の挙動が食い違う方を想定しています。


症状の正体:ビルドと配信は別々の証明書を見ている

まず押さえておきたいのは、iOS の .ipa 生成と App Store Connect への配信が、別々のタイミングで別々のものを検証しているという点です。

ビルド時に Xcode が要求するのは「指定したプロビジョニングプロファイルが存在し、その中に対応する署名証明書(private key を含む)がキーチェーンにあること」です。ここさえ揃えば .ipa は作れます。

ところがアップロード時、App Store Connect 側は .ipa埋め込まれたプロファイルと署名が、現在有効な証明書・登録済みデバイス・Bundle ID の権限と矛盾しないかを再検証します。ビルドが通っても、この再検証で弾かれることは普通に起こります。

match を絡めると、この二段構えに「Git リポジトリ上の証明書」という第三の真実が加わります。ローカルのキーチェーン、CI ランナーの一時キーチェーン、match の Git リポジトリ——この三つがすべて同じ証明書を指していれば問題ありませんが、どれか一つでもズレると、ビルドは古い証明書で成功し、アップロードは新しい権限で弾かれる、という非対称が生まれます。これが「署名ドリフト」の中身です。

代表的なズレ方を整理しておきます。

ズレの発生源典型的な引き金ビルドアップロード
match の証明書が再生成された誰かがローカルで match nuke / match --force を実行古い証明書で成功失効済み証明書として拒否
証明書の有効期限切れApple Distribution 証明書の1年経過キャッシュで成功することがある拒否
プロファイルと証明書の不一致Extension を追加したが match を再同期していないメインのみ成功Extension の署名欠落で拒否
CI のキーチェーンに証明書が入っていないreadonly: true で取得した証明書をキーチェーンに import し損ねた失敗(手前で落ちる)到達せず

注目したいのは上の二行です。ビルドは成功するのにアップロードで落ちるのは、ローカルや CI のキーチェーンに残った古い・期限切れの証明書でビルドが成立してしまうからです。再現しないのではなく、「再現する環境の証明書だけが古い」という状態でした。


ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
ビルド成功とアップロード失敗が同居する『署名ドリフト』の発生条件と、どの証明書・プロファイルが実際に埋め込まれたかを特定する手順
CI で match を readonly 運用し、証明書再生成による既存ビルドの一斉失効を防ぐ Fastfile / GitHub Actions の具体設定
アップロード前に .ipa 内の embedded.mobileprovision と署名証明書の有効期限を検査し、不一致なら止める事前ゲートの実装
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

お読みいただきありがとうございます

Antigravity Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • コピー&ペーストで使える実装コード付き
  • 毎日新しい上級ガイドを追加
  • ¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

関連記事

アプリ開発2026-05-06
UnityプロジェクトのCI/CDをAntigravity×GitHub Actionsで自動化する実践ガイド
GameCIとGitHub ActionsをAntigravityで設定し、Unityプロジェクトのビルド・テスト・TestFlight自動アップロードまでを完全自動化する実践的なCI/CDパイプライン構築ガイドです。
アプリ開発2026-04-01
App Store Connect 新機能2026:100以上の新メトリクスをAntigravityで活用する方法
2026年3月にAppleが刷新したApp Store Connectの100以上の新メトリクスを徹底解説。Antigravityを使ってアプリ分析を自動化し、データドリブンな改善サイクルを回す実践的な方法を紹介します。
アプリ開発2026-06-23
毎日変わるはずの壁紙ウィジェットが止まった — WidgetKit のリロード予算を実測して設計を組み直した記録
毎日壁紙が切り替わるはずのウィジェットが数日で更新を止めました。WidgetKit のタイムラインとリロード予算、拡張のメモリ上限を実測し、1日分のエントリをまとめて積む設計へ組み直した過程をまとめます。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →