Appearance
01. App Store Connect: サブスクリプション商品設定
目的
CycleJournal の課金プラン(月額 ¥1,800 / 年額 ¥14,400 + 7 日無料トライアル)を App Store Connect に登録し、StoreKit 2 経由で購入可能にする。
前提条件
- Apple Developer Program に加入済(年 $99)
- App Store Connect の Admin または App Manager ロール
- 対象アプリ(Bundle ID
com.akitoando.CycleJournal)が App Store Connect に登録済 - 課金契約(Paid Apps Agreement)に署名済
- App Store Connect → Agreements, Tax, and Banking で "Active" になっていること
- 銀行口座・税情報入力が完了していないと商品が "Waiting for Agreement" になり Sandbox でも取得不可
手順
1. Subscription Group の作成
- App Store Connect → 対象アプリ → Monetization → Subscriptions
- Create Subscription Group をクリック
- Reference Name:
CycleJournal Premium(内部識別用、ユーザーには見えない) - Save
同じ Group 内のサブスクは「アップグレード/ダウングレード」の関係になる。月額・年額は同一 Group に入れる。
2. 月額プランの作成
- Subscription Group
CycleJournal Premiumを開く - Create Subscription をクリック
- 入力項目:
- Reference Name:
Monthly Premium - Product ID:
com.akitoando.CycleJournal.monthly_1800- ⚠️ 必ずこの ID。
ios/Cycle/Features/Subscription/Models/SubscriptionProduct.swiftのSubscriptionProductID.monthlyと完全一致
- ⚠️ 必ずこの ID。
- Subscription Duration:
1 Month
- Reference Name:
- Create
- 次画面の Subscription Pricing で Add Subscription Price
- Country/Region: 日本 → ¥1,800
- 他国は Apple の自動換算テンプレートで OK(米国基準: $14.99 相当の Tier を選択)
- Subscription Information(Localizations)で日本語版を入力
- Subscription Display Name:
月額プレミアム - Description:
すべての Premium 機能を月額でご利用いただけます。
- Subscription Display Name:
- App Review Information:
- Review Screenshot: Paywall のスクリーンショット(後述、Sandbox テスト後に撮影)
- Review Notes:
テスト用 Sandbox アカウントは TestFlight で配布済
- Save
3. 年額プランの作成(7 日無料トライアル付き)
- Subscription Group
CycleJournal Premiumで再度 Create Subscription - 入力項目:
- Reference Name:
Yearly Premium - Product ID:
com.akitoando.CycleJournal.yearly_14400 - Subscription Duration:
1 Year
- Reference Name:
- Subscription Pricing:
- 日本 → ¥14,400
- Subscription Information:
- Display Name:
年額プレミアム - Description:
すべての Premium 機能を年額でご利用いただけます。最初の 7 日間は無料。
- Display Name:
- Introductory Offers セクションへスクロール → Set Up Introductory Offer
- 入力項目:
- Countries or Regions: All Countries(or 提供国のみ)
- Offer Type: Free Trial
- Duration: 1 Week (= 7 日)
- Start Date: 即時 / End Date: 無期限 or 一定期間
- Eligibility:
New Subscribers(新規購読者のみ)
- Save
- App Review Information / Review Screenshot を月額と同様に設定
4. Sandbox テスター作成
- App Store Connect → Users and Access → Sandbox Testers タブ
- + → 新規アカウント作成
- メールアドレス(実在しないものでよい、
test+sandbox@example.com等) - パスワード(強度高)
- 国/地域: Japan
- メールアドレス(実在しないものでよい、
- Invite
- iOS 実機 / シミュレータの Settings → Apple Account → Sandbox Account にこのアカウントでサインイン
- アプリ側で課金ダイアログが出たときにこのアカウントで承認
検証
Sandbox での購入フロー
- Xcode で実機ビルド & 起動
- Paywall に到達するまで操作
- 「7 日間無料で始める」タップ
- Sandbox アカウントのパスワード入力ダイアログ → 承認
SubscriptionStore.stateが.trial(productID: "com.akitoando.CycleJournal.yearly_14400", expiresAt: ...)になるSettings → Apple Account → Subscriptionsに "CycleJournal" が表示される
App Store Connect 側の状態
- 商品が
Ready to Submitになっていればアプリの審査提出に同梱可能 Missing Metadataの場合は Localizations / Pricing / Review Screenshot の不足を解消
トラブルシューティング
| 症状 | 原因 | 対処 |
|---|---|---|
Product.products(for:) が空配列を返す | 商品が "Waiting for Review" or "Waiting for Agreement" | Agreements, Tax, and Banking を完了させる。商品を Submit |
userCancelled ばかり返る | Sandbox アカウントが地域不一致 | Sandbox アカウントを Japan で作り直す |
Trial が nil | isEligibleForIntroOffer が false(過去にトライアル経験あり) | 別の Sandbox アカウントを作って再テスト |
purchase() が unverified を返す | .storekit Configuration が Production 設定 | 05 を見直す |
公式ドキュメント
- Setting up Auto-Renewable Subscriptions
- Set up introductory offers for auto-renewable subscriptions
- Creating Sandbox Apple Accounts