IAP の課金テストが始まらない3つの壁:有料契約・Missing Metadata・No script URL
コードは正しいのに Sandbox で価格が出ない、商品が取れない、Release ビルドが赤画面で死ぬ。アプリ内課金のテストにたどり着く前で詰まる3つを、見るべき順番付きでまとめる。
アプリ内課金(IAP)は、コードを書き終えてからが長い。Sandbox で価格すら出ない、商品が空で返る、テスト用ビルドが起動しない。原因はほとんどコードの外側にある。詰まりやすい順に3つまとめる。
1. 価格が一切出ない → まず有料アプリ契約を見る
事象
getProducts() 系の呼び出しで価格が表示されない。エラーですらなく、ただ空が返る。コードを何度見直しても直らない。
原因
新規デベロッパーで踏みやすいのが、有料アプリ契約(Paid Apps Agreement)が未締結のケースだ。App Store Connect の契約ステータスが「新規」のままだと、価格取得が一切動かない。コードの問題に見えて、契約の問題であることが多い。
解決策
端末ログを掘る前に、App Store Connect の「契約・税金・口座」を確認する。Paid Apps Agreement が有効でないなら、ここを通す。
- 契約に署名する
- 銀行口座を登録する(反映に約24時間。支店はルーティングナンバー下3桁で選ぶ)
- 納税フォームを提出する(W-8BEN の Part II の数字欄は空欄でよい)
契約が有効になってから、ようやくコード側の検証に進める。
2. 契約は有効なのに商品が取れない → Missing Metadata
事象
有料アプリ契約は有効、コードも正しい。それでも Sandbox で価格が表示されず、購入テストが始められない。
原因
IAP 商品のステータスが「メタデータが不足(Missing Metadata)」のままだと、StoreKit の商品取得 API がその商品を一切返さない。下書き状態の商品は存在しないのと同じ扱いになる。
最後に引っかかりやすいのが審査用スクリーンショットだ。表示名・説明・価格が揃っていても、スクショ未登録だと「不足」のままになる。
解決策
商品を「提出準備完了(Ready to Submit)」に上げる。テストを今すぐ通したいだけなら、正しいサイズの仮スクショ(例:1284×2778 の PNG)を1枚入れればよい。スクショを入れると自動保存され、Ready to Submit になり、StoreKit が商品を返すようになる。提出直前に実画面のスクショへ差し替える。
3. テスト用ビルドが赤画面で死ぬ → Release ビルドにする
事象
devicectl で手動インストールした Debug ビルドが、起動直後に赤画面で落ちる。
No script URL provided
原因
devicectl で入れた Debug ビルドは JS バンドルを Metro から取りに行く設計だが、Metro の場所を知らない。結果、スクリプトを読めずに死ぬ。Wi-Fi 越しの Metro 接続も絡んで不安定になる。
解決策
IAP / Sandbox の購入テストなら Release ビルドにする。Release は JS バンドルを埋め込むので、Metro も Wi-Fi 接続も不要になり、No script URL provided ごと消える。Xcode の GUI を開かずに全自動で入れられる。
# アーカイブ → Release ビルド → 実機へインストール
xcodebuild -scheme MyApp -configuration Release -archivePath ./build/app.xcarchive archive
xcrun devicectl device install app --device <DEVICE_ID> ./build/MyApp.app
補足:見るべき順番
価格が出ない・購入できないとき、コードを掘るのは最後でいい。順に潰す。
- 有料アプリ契約は有効か(契約・税金・口座)
- IAP 商品は Ready to Submit か(Missing Metadata になっていないか)
- テストビルドは Release か(Debug + devicectl は赤画面で死ぬ)
この3つを通してから、ようやくコード側の番だ。
※ 本記事にはアフィリエイトリンクが含まれます。