App Store 審査リジェクトから学んだ3つのこと(課金まわり)
「ぽんっ!」(旧称:でいりんぐ)を App Store に出すまでに、いくつか審査リジェクトを受けました。どれも課金まわりで、直し方も含めて再発防止になる学びだったので残します。
背景(当時の状況)
これは初回リリースにこぎ着けるまでの、App Store 審査とのやり取り(2026-07-02〜07-06 あたり)で受けた指摘の記録です。いずれも課金まわりに集中していて、審査に出しては直す、を何度か繰り返しました。個人開発だとガイドラインの細部を見落としがちなので、後から同じところで足踏みしないように残しています。
① 課金 SDK の初期化前呼び出しで起動クラッシュ
審査端末で起動直後にクラッシュしていました。原因は、課金 SDK(RevenueCat)の configure() が完了する前に API を呼んでいたことです。ローカルでは初期化が間に合っていても、審査環境のタイミングでは間に合わず落ちる、という発生条件でした。
対処: 課金 API を呼ぶ前に 初期化完了を保証するゲートを入れ、configure() 前は呼ばれないようにしました。「初期化は非同期で、まだ終わっていないかもしれない」を常に前提にするのが教訓です。
② 解約手順は「実行中のプラットフォームのぶんだけ」出す(2.3.10)
ペイウォールに解約手順を載せていたのですが、iOS/Android 両方の解約手順を併記していました。これがガイドライン 2.3.10(他プラットフォームへの言及)に抵触。
対処: 解約手順は 実行中のプラットフォームのぶんだけ表示するようにしました。iOS で動いているなら iOS の手順だけを出す、という単純な切り替えです。
③ 規約リンクは外部ブラウザでなくアプリ内で開く(3.1.2(c))
ペイウォール上の利用規約リンクが 外部ブラウザを開いていました。これがガイドライン 3.1.2(c) の指摘対象に。
対処: 規約リンクを アプリ内 WebView で開くように変更しました。課金導線から離脱させずに規約を確認させる形です。
まとめ
課金まわりは審査の指摘が集中しやすい領域でした。共通する学びは次の 3 点です。
- 初期化は非同期。課金 SDK は
configure()完了をゲートしてから呼ぶ。審査環境のタイミングで初めて落ちることがある。 - 他プラットフォームに言及しない。解約手順などは実行中プラットフォームのぶんだけ出す(2.3.10)。
- 課金導線のリンクはアプリ内で完結させる。規約は外部ブラウザでなく WebView(3.1.2(c))。
いずれも「言われてみれば当然」ですが、リリース前のチェックリストに入れておくと一発で通しやすくなります。