本文へ移動
YOSHITAKEapp

App Storeに10本出してわかったリジェクトパターン全実録【対応策つき】

目次(29)
  1. はじめに
  2. リジェクト一覧(実録)
  3. ケース①:Guideline 1.2 — UGC(ユーザー生成コンテンツ)
  4. 何が起きたか
  5. 原因
  6. 対応策
  7. ケース②:Guideline 1.5 — Developer Information
  8. 何が起きたか
  9. 原因
  10. 対応策
  11. ケース③:Guideline 2.1 — App Completeness(音声認識)
  12. 何が起きたか
  13. 原因
  14. 対応策
  15. ケース④:Guideline 3.1.1 — IAPボタンが無反応
  16. 何が起きたか
  17. 原因
  18. 対応策
  19. ケース⑤:ATT(App Tracking Transparency)未実装
  20. 何が起きたか
  21. 原因
  22. 対応策
  23. ケース⑥:Paid Apps Agreement 未締結
  24. 何が起きたか
  25. 原因
  26. 対応策
  27. まとめ:リジェクトされたら最初にやること
  28. おわりに
  29. 📱 作者のアプリ一覧

はじめに

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は作ったが、報告ボタン・モデレーション機能・利用規約ページが一切なかった。

対応策

以下を追加しました:

  1. 報告ボタン:各クチコミに「報告する」ボタンを追加

  2. 利用規約URL:App Store Connect のメタデータに利用規約URLを設定

  3. プライバシーポリシー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の「契約/税金/口座情報」から順番に手続きします:

  1. Paid Apps Agreement に署名

  2. 銀行口座を登録

  3. 税務情報(W-8BEN)を提出

この3つが揃わないとIAPは動きません。コードより先に契約を済ませておくのが正解です。


まとめ:リジェクトされたら最初にやること

① Resolution Centerを必ず確認する

リジェクトメールに記載のリンクから審査チームのコメントを読む。「なぜ落とされたか」が書いてある。

② ガイドライン番号で検索する

`Guideline 1.2 App Store` などで検索すると、同じ問題を解決した人の記事が大量に出てくる。

③ 修正後は審査メモを添付する

再提出時に「何を修正したか」を審査メモ(Review Notes)に書くと、審査チームが確認しやすくなり通過率が上がります。


おわりに

リジェクトは恥ずかしいことでも失敗でもなく、「審査チームとのやりとり」だと思うようになりました。

ガイドラインを読んで、直して、再提出する。このサイクルを繰り返しているうちに、最初から引っかかりにくいアプリが作れるようになります。

詰まったら同じガイドライン番号で調べてみてください。必ず誰かが同じ経験をしています。


📱 作者のアプリ一覧

App Storeで10本以上リリース中です。