App Storeに10本出してわかったリジェクトパターン全実録【対応策つき】
目次(29)
- はじめに
- リジェクト一覧(実録)
- ケース①:Guideline 1.2 — UGC(ユーザー生成コンテンツ)
- 何が起きたか
- 原因
- 対応策
- ケース②:Guideline 1.5 — Developer Information
- 何が起きたか
- 原因
- 対応策
- ケース③:Guideline 2.1 — App Completeness(音声認識)
- 何が起きたか
- 原因
- 対応策
- ケース④:Guideline 3.1.1 — IAPボタンが無反応
- 何が起きたか
- 原因
- 対応策
- ケース⑤:ATT(App Tracking Transparency)未実装
- 何が起きたか
- 原因
- 対応策
- ケース⑥:Paid Apps Agreement 未締結
- 何が起きたか
- 原因
- 対応策
- まとめ:リジェクトされたら最初にやること
- おわりに
- 📱 作者のアプリ一覧
はじめに
App Storeにアプリを出すたびに、リジェクトされました。
1本目は「なんで落とされるんだ」と思っていましたが、10本出すうちに「あ、これはあのパターンだ」と分かるようになってきました。
この記事では、実際に食らったリジェクトのガイドライン番号・原因・対応策を全部公開します。
同じで詰まっている人の参考になれば。
リジェクト一覧(実録)
| ガイドライン | アプリ | 原因 | 対応 |
|---|---|---|---|
| 1.2 (UGC) | もぎたび | クチコミ機能にモデレーションなし | 報告機能・利用規約を追加 |
| 1.5 (Developer Info) | ZombieNurtureGame | サポートURLが機能していない | GitHub Pagesでサポートページ作成 |
| 2.1 (App Completeness) | ZombieNurtureGame | 音声認識の説明が不十分 | Resolution Centerで詳細説明を返信 |
| 3.1.1 (IAP) | もぎたび | 課金ボタンが無反応 | Swiftコードのバグ修正 |
| ATT未実装 | もぎたび | 広告SDKがあるのにATT未対応 | ATT許可ダイアログを実装 |
| 契約未締結 | もぎたび | Paid Apps Agreement未署名 | Developer Portalで契約・W-8BEN提出 |
ケース①:Guideline 1.2 — UGC(ユーザー生成コンテンツ)
何が起きたか
もぎたびにクチコミ機能を実装してApp Storeに提出したら、こんなメッセージが返ってきました。
"Your app includes a feature that allows users to post content, but does not include the following required elements:
A mechanism for users to flag objectionable content."
ユーザーが投稿できる機能(クチコミ)があるのに、「不適切なコンテンツを報告する機能がない」という指摘です。
原因
クチコミを投稿できるUIは作ったが、報告ボタン・モデレーション機能・利用規約ページが一切なかった。
対応策
以下を追加しました:
報告ボタン:各クチコミに「報告する」ボタンを追加
利用規約URL:App Store Connect のメタデータに利用規約URLを設定
プライバシーポリシーURL:同様に設定
ポイントは「実際にモデレーションが機能している必要はない」ことです。報告する仕組みが存在すれば通過します。
ケース②:Guideline 1.5 — Developer Information
何が起きたか
ZombieNurtureGame の審査中に止まり、Resolution Centerからメッセージが来ました。
"The support URL specified in your app's metadata does not work."
原因
App Store Connectのサポートリンク欄に記入していたURLが、実際には存在しないページを指していました。
対応策
GitHub Pagesで無料のサポートページを5分で作成し、URLを差し替えました。
https://pinepor.github.io/zombie-nurture-support/内容はシンプルでOKです。アプリ名・バージョン・お問い合わせ先(メールアドレス)を書いたページを作れば通過します。
ケース③:Guideline 2.1 — App Completeness(音声認識)
何が起きたか
ZombieNurtureGameには「ゾンビと会話する」機能(音声認識)があります。これについて審査チームから質問が来ました。
"We noticed your app uses speech recognition. Please clarify whether user voice data is processed by third-party AI services."
原因
音声認識を使っているアプリは、「どこでその音声が処理されているか」を明示しないとリジェクトされるケースがあります。特にサードパーティのAIサービスに送信している場合は厳しくチェックされます。
対応策
Resolution Centerで以下を返信しました。
"This app uses Apple's SFSpeechRecognizer only. No voice data is sent to any third-party AI service. All speech processing occurs on-device or via Apple's servers only."
Apple純正のAPIしか使っていないことを明示すれば問題なく通過しました。
ケース④:Guideline 3.1.1 — IAPボタンが無反応
何が起きたか
もぎたびに「広告を削除する ¥300」ボタンを実装し、審査提出しました。審査チームから返ってきたのは:
"We noticed that the in-app purchase button does not respond when tapped."
原因
コードに静かなバグがありました。
// 問題のコード
var isProductLoaded: Bool {
return product != nil
}
Button("広告を削除する ¥300") {
purchase()
}
.disabled(!isProductLoaded) // ← ここが問題StoreKitで `product` を非同期に取得する処理があったのですが、取得が完了する前にボタンが表示されると `product == nil` → `isProductLoaded = false` → ボタンが永遠に無効のまま、という状態になっていました。
シミュレーターでは気づかず、審査チームのデバイスで初めて再現したパターンです。
対応策
`isProductLoaded` の条件を削除し、ボタンは常に有効にしてローディング状態をインジケーターで表示するように修正しました。
ケース⑤:ATT(App Tracking Transparency)未実装
何が起きたか
AdMobを実装してアプリを提出したところ、以下のリジェクトが来ました。
"Your app uses the Advertising Identifier (IDFA) but does not include the AppTrackingTransparency framework."
原因
AdMob SDKはデフォルトでIDFAを使います。iOS 14.5以降、IDFAを使うアプリはATT(App Tracking Transparency)フレームワークを組み込み、ユーザーに許可を求めるダイアログを表示しなければなりません。
対応策
`Info.plist` に以下を追加し、ATT許可ダイアログを実装します。
<key>NSUserTrackingUsageDescription</key>
<string>より関連性の高い広告を表示するために使用します。</string>起動時に許可ダイアログを表示するコードも追加:
import AppTrackingTransparency
ATTrackingManager.requestTrackingAuthorization { status in
// AdMob初期化
GADMobileAds.sharedInstance().start()
}ケース⑥:Paid Apps Agreement 未締結
何が起きたか
IAPを実装してテストしようとしたら、サンドボックス環境でも課金処理が動かない。審査に出したらリジェクト、という状態になりました。
原因
App Store ConnectでPaid Apps Agreement(有料アプリ契約)に署名していないと、IAPが一切機能しません。アプリのコードが正しくても意味がない。
さらに外国籍の場合、W-8BEN(源泉徴収免除申告書)の提出も必要です。日米租税条約を適用すると源泉徴収税率が0%になります。
対応策
App Store Connectの「契約/税金/口座情報」から順番に手続きします:
Paid Apps Agreement に署名
銀行口座を登録
税務情報(W-8BEN)を提出
この3つが揃わないとIAPは動きません。コードより先に契約を済ませておくのが正解です。
まとめ:リジェクトされたら最初にやること
① Resolution Centerを必ず確認する
リジェクトメールに記載のリンクから審査チームのコメントを読む。「なぜ落とされたか」が書いてある。
② ガイドライン番号で検索する
`Guideline 1.2 App Store` などで検索すると、同じ問題を解決した人の記事が大量に出てくる。
③ 修正後は審査メモを添付する
再提出時に「何を修正したか」を審査メモ(Review Notes)に書くと、審査チームが確認しやすくなり通過率が上がります。
おわりに
リジェクトは恥ずかしいことでも失敗でもなく、「審査チームとのやりとり」だと思うようになりました。
ガイドラインを読んで、直して、再提出する。このサイクルを繰り返しているうちに、最初から引っかかりにくいアプリが作れるようになります。
詰まったら同じガイドライン番号で調べてみてください。必ず誰かが同じ経験をしています。
📱 作者のアプリ一覧
App Storeで10本以上リリース中です。
もぎたび — 全国1,396件の果物狩り農園ナビ
https://apps.apple.com/jp/app/id6762582487ZombieNurtureGame — ゾンビを育てて人間に回復させる3D育成ゲーム
https://apps.apple.com/jp/app/id6769079116