開発Tips

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))。

いずれも「言われてみれば当然」ですが、リリース前のチェックリストに入れておくと一発で通しやすくなります。