iOS App Store での IAP の審査ガイドライン
このプラグインのインストールステップとフルマークダウンガイドのセットアッププロンプトをコピーしてください。
App Store へのアプリの承認には、特にインアプリ購入とサブスクリプションの実装に関して、Apple のガイドラインに注意する必要があります。このガイドでは、初回提出でレビューを通過するために必要なすべての情報をカバーしています。

提出前に
提出前にアプリのレコード自体が完了していることを確認するまで、Apple が購入フローのレビューを実行しません:
アプリのレコードにレコード
- レコード プライバシーポリシーURL App Store Connect内
- 追加 サポートURL ユーザーに実際の連絡先情報を提供するもの
- 質問票を完了してアプリが公開可能になるように 追加 アプリレビュー連絡先情報
- レビューノートが明確で ログインが必要な場合、 and clear reviewer notes
- If login is required, provide a __CAPGO_KEEP_0__
実際のビルドのスクリーンショットを使用してください。
iPhoneの場合、- (6.7インチ)はデフォルトのサイズです。
- iPadで動作する場合は、iPadのスクリーンショットもアップロードしてください。
1290 x 2796現在認可されている大きなiPadサイズには - Appleはサポートサイトをプレースホルダーとして扱わないでください。実際の連絡先情報を含めるようにしてください。ユーザーはアプリの問題、フィードバック、機能要求について連絡することができます。
- App Storeのリストメタデータにポリシーとサポートのリンクを含めます。
2064 x 2752(13インチ) と2048 x 2732(12.9インチ) - iPhoneのスクリーンショットを拡大してiPadのサポートを偽装することはない
TestFlightでレビュアージャーニーをドライランする
セクション “TestFlightでレビュアージャーニーをドライランする”実機でAppleが実行するパスを正確に走らせる:
- TestFlightから最新のビルドをインストールする
- レビュー用のアカウントでサインインする
- 非表示のジェスチャーやデバッグメニューを隠さずに
- 購入、復元、サブスクリプション管理フローを完了する
- パーミッションが拒否された場合でも、アプリが正しく動作することを確認する
インアプリ購入要件
「インアプリ購入要件」価格透明性(重要)
「価格透明性(重要)」Appleは購入前に明確な価格の披露が必要です:
必須要素:
- 購入ボタン前に正確な価格を表示する
- 購入金額に対してユーザーが何を得るかを明確に示す
- 課金時期を示す
- 一般的な拒否理由:
Common Rejection:
「サブスクリプション価格は明確かつ事前提示でなければなりません。
:::caution 価格一貫性 すべての価格は次のものと一致する必要があります:
- App Store メタデータリスト
- インアプリ購入画面
- サブスクリプション管理画面
ストアリスト画面とアプリ画面の間で$1の差でも自動的に拒否される
サブスクリプションプランの表示
「サブスクリプションプランの表示」セクション必要な披露:
- すべてのサブスクリプションのレベルを一緒に表示する
- 各レベルの機能の明確な比較
- プレミアムレベルへの自動切り替えをUIのトリックで行わない
- キャンセル方法の簡単な位置付け

規制に適合したUIの例
import { NativePurchases } from '@capgo/native-purchases';
function SubscriptionScreen() { return ( <div> <h2>Choose Your Plan</h2>
{/* Show all tiers equally */} <PlanCard title="Basic" price="$4.99/month" features={['Feature A', 'Feature B']} /> <PlanCard title="Premium" price="$9.99/month" features={['All Basic', 'Feature C', 'Feature D']} highlighted={false} // Don't force premium />
{/* Clear cancellation info */} <Text> Cancel anytime in Settings > Subscriptions. No refunds for partial periods. </Text> </div> );}購入の復元
「購入の復元」セクション必要な実装
IAPを搭載したすべてのアプリは、ユーザーがサポートに連絡することなく、以前の購入を復元する方法を提供する必要があります。
import { NativePurchases, PURCHASE_TYPE } from '@capgo/native-purchases';
async function restorePurchases() { try { await NativePurchases.restorePurchases();
const { purchases } = await NativePurchases.getPurchases({ productType: PURCHASE_TYPE.SUBS, });
const activeSub = purchases.find( (purchase) => purchase.isActive && purchase.expirationDate, );
if (activeSub) { unlockPremiumFeatures(); showMessage('Purchases restored successfully!'); return; }
const { purchases: iaps } = await NativePurchases.getPurchases({ productType: PURCHASE_TYPE.INAPP, }); const hasIap = iaps.some((purchase) => purchase.productIdentifier === 'premium_unlock');
showMessage( hasIap ? 'Premium purchase restored!' : 'No previous purchases found.', ); } catch (error) { showError('Failed to restore purchases. Please try again.'); }}
// Add a visible "Restore Purchases" button<Button onClick={restorePurchases}> Restore Purchases</Button>一般的な拒否理由
「一般的な拒否理由」セクション1. アプリのクラッシュまたは機能の不具合
「1. アプリのクラッシュまたは機能の不具合」セクションなぜ失敗するのか:
- アプリ起動時にクラッシュする
- 購入フローが完了しない
- スクリーンショットに表示されている機能が機能しない
対策:
- 実機でテストする (シミュレータだけでは)
- すべてのサブスクリプションフローをエンドツーエンドでテストする
- 受け取り証明書の検証が正常に動作することを確認する
- ネットワークエラーのハンドリングを確認する
2. メタデータの不一致
「2. メタデータの不一致」のセクションなぜ失敗するのか:
- スクリーンショットは現在のビルドにない機能を表示している
- 説明では実際に存在しない機能を記載している
- メタデータの価格設定がアプリ内価格設定と異なる

対策:
// Document exactly what's in each tierconst SUBSCRIPTION_FEATURES = { basic: ['Ad-free', 'Cloud sync', 'Basic themes'], premium: ['Ad-free', 'Cloud sync', 'All themes', 'Priority support']};
// Use these in both your app AND App Store description3. 許可の説明が不足している
セクション「3. 許可の説明が不足している」なぜ失敗するのか:
- カメラ/位置情報/健康情報の許可を求めることなく説明
- 許可の要求が複数の画面奥に埋め込まれている
- 曖昧または一般的な許可の説明
対策:
アップデートを Info.plist 明確な説明とともに:
<key>NSCameraUsageDescription</key><string>Camera access is needed to scan product barcodes for quick subscription upgrades.</string>
<key>NSLocationWhenInUseUsageDescription</key><string>Location helps us show relevant local content in your Premium subscription.</string>4. 宣伝が誤解を招く
セクション「4. 宣伝が誤解を招く」なぜ失敗するのか:
- 「世界で#1のアプリ」などの証拠なしの主張
- 「無制限」な機能が実際には制限がある
- 「限りある時間」などの偽の緊急感の使用


対策:
- 説明では具体的かつ事実に基づいて記述する
- 超lativesを使用しない
- ユーザーに偽の不足感を与えない
5. 非表示のキャンセルプロセス
セクション「5. 非表示のキャンセルプロセス」なぜ失敗するか:
- キャンセル方法の説明がない
- キャンセルボタンが非表示または隠されている
- Appleのネイティブフローを使用しない複数ステップのキャンセルプロセス
対策:
// Always inform users about cancellationfunction SubscriptionInfo() { return ( <div> <h3>How to Cancel</h3> <ol> <li>Open iPhone Settings</li> <li>Tap your name at the top</li> <li>Tap Subscriptions</li> <li>Select this app and tap Cancel</li> </ol>
<p>Or manage directly in the App Store app.</p>
<Button onClick={openSubscriptionManagement}> Manage Subscription in Settings </Button> </div> );}
async function openSubscriptionManagement() { // Direct link to iOS subscription management await NativePurchases.showManageSubscriptions();}プライバシーとデータ使用状況(セクション 5.1.1)
セクション「プライバシーとデータ使用状況(セクション 5.1.1)」2025年、Appleはプライバシー要件を大幅に厳格化しました。
必要な披露
各権限の場合:なぜ必要なのか(具体的な用途)
- どの時点で使用されるか
- データの保存/共有方法
- オプションか必須か
- コピー
例: 正しい許可フロー
セクション「例: 正しい許可フロー」async function requestCameraPermission() { // Show explanation BEFORE requesting await showDialog({ title: 'Camera Access', message: 'We need camera access to let you scan barcodes for quick product lookup. Your photos are never uploaded or stored.', buttons: ['Not Now', 'Allow'] });
// Then request permission const result = await Camera.requestPermissions(); return result.camera === 'granted';}プライバシー栄養ラベル
セクション「プライバシー栄養ラベル」App Store のプライバシー ラベルが正確に反映されていることを確認してください。
- 購入履歴の収集
- 受領のためのメールアドレス
- 不正防止のためのデバイス ID
- 分析のための使用データ
2025 年に不正確なプライバシー ラベルは、一般的な却下理由です。データ収集を慎重に検討してください。
提出前にチェックリスト
セクションのタイトルは “提出前にチェックリスト” です
-
すべての購入フローのテスト
- 各サブスクリプションのレベルを購入してください
- 無料トライアルをテストしてください
- 導入オファーが正しく適用されることを確認してください
- 購入を復元してください
- ファミリーシェアリング (有効の場合) を確認してください
- 複数のデバイスでテストしてください
-
価格の一貫性を確認してください
- App Store のメタデータがインアプリ価格と一致することを確認してください
- すべての通貨が正しいことを確認してください
- 試行期間の説明と一致するか確認する
- 導入オファーの条件が正確か確認する
-
全てのコピーを確認する
- プレースホルダーテキストを削除する
- 実行可能なテストが可能な宣言を確認する
- 文法とスペルを確認する
- 現在のビルドと一致する説明を確認する
- 競合他社の言及を削除する
-
権限をテストする
- 必要な権限のみを要求する
- 権限を要求する前に明確な説明を表示する
- 「拒否」フローをテストする (アプリは正常に動作するはず)
- Info.plistの説明が明確であることを確認する
-
テストアカウントを準備する
- レビュー中に有効なまま残るレビュー用アカウントを作成する
- App Review情報にログイン情報を記載する
- レビュアーが支払い壁を通過し購入フローを完了できることを確認する
- 必要に応じて、Notesフィールドに追加アカウントまたはアプリ固有のSwitchを含める
-
メタデータを確認する
- スクリーンショットが現在のUIと一致する
- サポートURLに実際の連絡先情報が含まれている
- プライバシーポリシーURLが入力されている
- ビルド内のコンテンツと一致する年齢制限が設定されている
- アプリプレビュー動画(有効な場合)が現在のバージョンを表示している
- 機能の正確な説明
- プライバシーポリシーはアプリ内およびストアのリストからアクセスできます
-
詳細なレビューノートを書く
Contact:Name: Jane DeveloperEmail: review@yourapp.comPhone: +1 555-0100Test Account:Email: reviewer@test.comPassword: TestPass123!This account does not expire during review.Testing Instructions:1. Log in with test account above2. Tap "Upgrade to Premium" button3. Select "Monthly Premium" subscription4. Complete purchase (no charge in sandbox)5. Verify premium features unlockNote: Subscription pricing is clearly shown before purchase.Cancellation instructions are in Settings > Account.
レビューのタイムライン
「レビューのタイムライン」セクション
標準レビュー: 24-48時間 ピーク期間: 3-5日 (App Storeのホリデーリリース) 週末: レビューが処理されていません 優先レビュー: 緊急修正用のバグ修正が可能 (App Store Connect からリクエストしてください)
App Store Connect でよく見るステータス:
Waiting for ReviewIn ReviewPending Developer ReleaseRejected
2026 年の提出焦点
2026 年の提出焦点現在の焦点領域
現在の焦点領域1. サブスクリプションの明確性
- iOSアプリストアレビューのためのネイティブ購入
- 比較対象のアプリの価格を隠すような「暗いパターン」は使用しないでください
- ダウングレード/アップグレードのパスは明確でなければなりません
2. メタデータの正確さ
- レビューされるビルドと一致するスクリーンショットが必要です
- iPadのサポートが有効になっている場合、iPad用のスクリーンショットは必須です
- サポートURLとプライバシーポリシーは提出前にすでに公開されている必要があります
3. プライバシーとレビュー詳細の品質
- SDKが実際に収集するものと一致するプライバシー情報が必要です
- アプリレビューの連絡先情報とメモは最初の提出時に完了している必要があります
- デモクレデンシャルはレビュー期間中に有効なままにしてください
4. 提出の準備
- Appleは定期的に最小限のSDK要件を更新するので、リリースビルドをアップロードする前に現在の締切を確認してください。
- TestFlightは、実際のレビュ modalパスを確認するために、最も安全な場所です。
ネイティブ購入プラグインのベストプラクティス
「ネイティブ購入プラグインのベストプラクティス」のセクション適切なエラーハンドリングを実装する
「適切なエラーハンドリングを実装する」のセクションimport { NativePurchases, PURCHASE_TYPE } from '@capgo/native-purchases';
async function handlePurchase(productId: string) { try { const transaction = await NativePurchases.purchaseProduct({ productIdentifier: productId, productType: PURCHASE_TYPE.SUBS, });
// Success await validateReceiptOnServer(transaction.receipt); showSuccess('Subscription activated!'); unlockFeatures();
} catch (error: any) { // Handle specific error cases if (error.code === 'USER_CANCELLED') { // User cancelled - don't show error console.log('Purchase cancelled by user'); } else if (error.code === 'PAYMENT_PENDING') { showInfo('Payment is pending. Please check back later.'); } else if (error.code === 'PRODUCT_ALREADY_PURCHASED') { // Restore instead await NativePurchases.restorePurchases(); } else { // Show user-friendly error showError('Unable to complete purchase. Please try again.'); } }}ローディング状態を表示する
「ローディング状態を表示する」のセクションfunction PurchaseButton({ productId }: { productId: string }) { const [loading, setLoading] = useState(false);
const handlePurchase = async () => { setLoading(true); try { await NativePurchases.purchaseProduct({ productIdentifier: productId }); } finally { setLoading(false); } };
return ( <button onClick={handlePurchase} disabled={loading}> {loading ? 'Processing...' : 'Subscribe Now'} </button> );}利用規約を明確に表示する
「利用規約を明確に表示する」のセクションfunction SubscriptionTerms() { return ( <div className="terms"> <p> Subscription automatically renews unless cancelled at least 24 hours before the end of the current period. </p> <p> Your account will be charged for renewal within 24 hours prior to the end of the current period. </p> <p> Subscriptions may be managed by the user and auto-renewal may be turned off in Account Settings after purchase. </p> <p> <a href="/terms">Terms of Service</a> | <a href="/privacy/">Privacy Policy</a> </p> </div> );}アプリが却下された場合
セクション「アプリが却下された場合」解決方法
セクション「解決方法」-
却下の理由をよく読み
- 具体的なガイドラインを確認する (例:3.1.1、5.1.1)
- Appleが指摘した問題を完全に理解する
-
根本的な問題を修正する
- 問題を根本的に修正するだけではなく、根本的な原因を修正する
- 修正を徹底的にテストする
- 変更した内容をドキュメント化する
-
対応センターで回答する
Thank you for your feedback. I have addressed the issue:Issue: Subscription pricing not clear upfrontFix: Added explicit pricing display on subscription selectionscreen showing "$9.99/month" before purchase button. Also addedcancellation instructions on the same screen.The changes are in this submission and can be tested using theprovided test account. -
すぐに再提出する
- 再提出は通常速くレビューされる
- 通常24時間以内
抗議プロセス
「抗議プロセス」のセクションあなたが拒否が間違っていることを信じる場合:

- App Store Connectで「抗議」ボタンをクリックする
- 明確な証拠を提供する:
- コンプライアンスを示すスクリーンショット
- iOS App Store レビューのためのネイティブ購入
- 具体的なガイドラインへの参照
- 要件を満たす方法の説明
- プロフェッショナルで事実に基づいた

ドキュメントの例
追加リソース- App Store レビュー ガイドライン
- In-App 購入 ガイドライン
- サブスクリプションのベスト プラクティス
- App Store Connect ヘルプ
- スクリーンショットの仕様
- プラットフォーム バージョン情報
サポート
サポート問題が解決しない場合
- レビュー ネイティブ購入のドキュメント
- 一般的なトラブルシューティングの問題を確認 Apple Developer Supportに連絡してください
- 必要な専門家の助けが必要ですか?
必要な専門家の助けが必要ですか?
アプリレビューの問題や個別のアシスタンスが必要ですか?アプリレビューの問題や個別のアシスタンスが必要ですか? Capgoのチームと専門家と電話で会議を予約してください 以下の専門的なサポートに対して
- IAPの実装の確認と最適化
- App Storeのレビューの準備と戦略
- 提出物のチェックリストの確認
- 却下の解決と異議申し立て
- 完全なテストと検証
Capgoの専門家は、IAPのためのiOS App Storeのレビューのガイドラインを超えて、数百のアプリをレビューに通わせました!
IAPのためのiOS App Storeのレビューのガイドラインから続けてください
セクションのタイトル “IAPのためのiOS App Storeのレビューのガイドラインから続けてください”あなたが使用している IAPのためのiOS App Storeのレビューのガイドライン ストアの承認と配布を計画するには、接続する Using @capgo/native-purchases Using @capgo/native-purchases のネイティブ機能 Using @capgo/capacitor-in-app-review Using @capgo/capacitor-in-app-review の実装詳細 Using @capgo/capacitor-in-app-review Using @capgo/capacitor-in-app-review のネイティブ機能 Using @capgo/capacitor-native-market Using @capgo/capacitor-native-market の実装詳細 Using @capgo/capacitor-native-market Using @capgo/capacitor-native-market のネイティブ機能