App Storeで7種類の却下を受けたので、提出前に機械で検査する仕組みを作った

App Storeの却下7種を提出前ゲートの検査項目に変えた アプリ開発

※本記事にはプロモーションを含みます。

2026年8月、App Storeに出したアプリが立て続けに落ちました。理由は7種類あります。

落ちるたびに原因を調べて直していたのですが、4本目でやり方を変えました。学びを「覚えておく」のをやめて、「提出前に必ず走る検査」に変換することにしたのです。覚えておく方式は、私の場合まったく機能しなかったからです。

この記事は、受けた却下理由7種の全リストと、それを14項目の機械的な検査に変えた記録です。

受けた却下理由7種

まず、実際に受けたものを全部並べます。個人開発で新規アプリを出すと、この辺りが順番に来ます。

#却下理由内容
1Guideline 2.1 – Information Needed実機のスクリーン録画と7〜8項目の回答を要求される。新規アプリはほぼ必ず来る(私は5回)
2Guideline 2.1(b) – App Completenessアプリ内に名前が出ているアプリ内課金を、審査に出していなかった
3Guideline 2.1(b) – Information Neededアプリ内で課金の場所が見つけられない、と言われた
4Guideline 5.1.1(v) – Legalアカウントに紐づかない購入の前に、会員登録を強制していた
5Guideline 4 – DesigniPad Air 11-inch (M3) / iPadOS 26.6.1 で画面が出ない・詰まっている
6Guideline 1.4.1 – Physical Harm健康・医療に関する情報に、出典のリンクが無い
7EULAリンクなし(自動判定)+ ITMS-90068サブスクがあるのに説明文に利用規約リンクが無い/MinimumOSVersion が低い

並べてみると分かるのですが、7種のうちアプリの品質そのものが原因なのは1つもなく、「審査情報の書き方」と「iPadでの見え方」と「設定漏れ」です。どれも、提出する前に機械で調べられるものでした。

だから、検査スクリプトにした

受けた却下を全部Pythonの検査項目に変換し、提出スクリプトの先頭から呼ぶようにしたので、1つでも満たさなければ提出できません。いま入っている検査は14項目です。

検査項目対応する却下理由
最低iOSバージョンITMS-90068
輸出コンプライアンス申告提出時の質問
審査メモGuideline 2.1 Information Needed
実機のスクリーン録画Guideline 2.1 Information Needed
サポート/プライバシーURLGuideline 2.1
アプリ内課金Guideline 2.1(b) / 5.1.1(v)
EULAリンク自動判定
iPadのレイアウト検査Guideline 4 Design
iPadの共有シートGuideline 2.1 crash
スクリーンショットGuideline 2.3.3
バックグラウンド再生Guideline 2.5.4
健康情報の出典Guideline 1.4.1
初期値の日付自分で踏んだ地雷
バックアップの文字化け自分で踏んだ地雷
下2つは却下ではなく、自分で踏んで痛い目を見たもの

各検査は OK / NG / スキップの3値を返し、該当しないもの(サブスクが無いアプリのEULA検査など)はスキップになるので、アプリごとに検査を書き分ける必要はありません。

検査が実際に拾ったもの

作った直後に、思っていなかったバグが出てきました。

iPadで共有シートを開くとクラッシュする

iPadでは共有シート(アクティビティビュー)を出すときに表示元の位置を指定しないとクラッシュするのですが、ResaleAI がこれに該当していました。iPhoneでは落ちないのでiPadを触っていなければ気づけませんし、審査は iPad 実機でも見るので、ここで落ちます。

そもそも検査対象を取り違えていた

作った検査が、最初は正しく動いていませんでした。Flutterのプロジェクトが frontend/ の下にある構成を見ていなかったのです。ResaleAI とモグミルがこの形でした。

この記事に出てくるモグミルは公開中です。ダウンロードはこちら: モグミル – App Store(無料)。

直した結果、上の iPad クラッシュが見つかりました。検査が構造を取り違えると、「設定してあるのにNG」と「壊れているのにOK」の両方が起きるので、検査そのものを疑う必要があるという当たり前のことを学びました。

検査では防げないものが1つある

8月29日に、5本のアプリが同時に Guideline 4.3(a) – Design – Spam で落ちましたが、これだけは、この仕組みで防げません。

理由は単純で、4.3(a) はアプリ単体ではなく「アプリの集合」と「アカウントの振る舞い」を見ているからで、1本のリポジトリを検査しても、そこには写らないのです。

この件は別の記事に書きました。

審査メモは4000文字が上限

検査項目のうち「審査メモ」は、書いてあるかだけでなく文字数も見ています。App Store Connect の審査メモは4000文字が上限で、超えると保存が通らないので、内容を足すときは総文字数を確認する必要があるからです。

通ったアプリ(モグミル)の審査メモは英文10セクションの構成だったので、これを手本にして他のアプリも書き直しています。

サポートURLにプライバシーポリシーを流用しない

検査で分かったことをもうひとつ挙げると、通ったモグミルは専用のサポートページを持っていましたが、他の2本はプライバシーポリシーのページをサポートURLに指していました。

サポートURLとプライバシーポリシーURLは別物として用意するものなので、このブログに専用ページを新設して差し替えました。

運用のルール

決めたことは1つだけです。新しい却下が来たら、必ず検査項目を足す。これをやっている限り同じ理由では二度と落ちませんし、逆にこれをやらないと7種類を全部覚えていなければならなくなります。それは私には無理でした。

出典

  • App Store Connect から受信した却下通知(2026年8月14日〜8月29日)の原文
  • App Review Guidelines https://developer.apple.com/app-store/review/guidelines/
  • 検査スクリプトの実行結果(2026年8月28日)

あわせて読みたい

関連する本・道具

コメント

タイトルとURLをコピーしました