iOS App Store IAPの審査ガイドライン
__CAPGO_KEEP_0__
App Store へのアプリの承認には、Apple のガイドラインに留意し、インアプリ購入やサブスクリプションを実装する際には特に注意が必要です。このガイドでは、初回提出でレビューを通過するために必要なすべての情報がカバーされています。

提出前に
「提出前に」のセクションApp Store Connect のセットアップを完了する
「App Store Connect のセットアップを完了する」のセクション購入フローをAppleがレビューする前に、まずアプリのレコード自体が完了していることを確認してください:
- App Store Connectに プライバシーポリシーURL App Store Connectに
- サポートURL ユーザーが実際の連絡先情報にアクセスできるようにする __CAPGO_KEEP_0__
- アプリを公開できるように、質問紙を完了してください。 年齢制限 アプリの公開が可能になるように、質問紙を完了してください。
- 追加 App Reviewの連絡先情報と、クリアなレビューノートを追加してください。 レビューが必要な場合、有効期限が切れないデモアカウントを提供してください。
- 注意 注意
実際のスクリーンショットを準備する
「実際のスクリーンショットを準備する」のセクション- レビュー中の実際のビルドから現在のスクリーンショットを使用する
- iPhoneの場合、
1290 x 2796(6.7インチ)は最も簡単なデフォルトサイズ - あなたのアプリがiPadで動作する場合、iPadのスクリーンショットもアップロードする
- 現在受け入れられている大きなiPadサイズには
2064 x 2752(13インチ)と2048 x 2732(12.9インチ)が含まれます - iPhoneのスクリーンショットをiPadのサポートを偽るために伸ばさない
テストフライトでレビュアーの旅をドライランする
「テストフライトでレビュアーの旅をドライランする」のセクション実機上でAppleが実行するパスを正確に実行する:
- テストフライトから最新のビルドをインストールする
- 購入レビュー用のアカウントでサインインする
- 非表示のジェスチャーやデバッグメニューなしで壁を通過する
- 購入、復元、サブスクリプション管理フローの実行
- パーミッションが拒否された場合でもアプリが正しく動作することを確認する
In-App Purchase Requirements
「In-App Purchase Requirements」セクション価格の透明性 (重要)
「価格の透明性 (重要)」セクション購入前に明確な価格の披露が必要であることはAppleが要求しています:
必須要素:
- 購入ボタンを押す前に正確な価格を表示する
- 請求頻度を表示する (例: "$9.99/月")
- ユーザーが得るものを明確に述べる
- 課金時期を示す
一般的な拒否理由:
“Subscription pricing must be clear and upfront.”
:::注意価格の一貫性 すべての価格は次の場所で一致する必要があります:
- App Store メタデータ リスト
- インアプリ購入画面
- サブスクリプション管理画面
ストアのリスト価格 ($4.99) とアプリの価格 ($5.99) の間で $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)」のセクションAppleは2025年にプライバシー要件を大幅に強化しました
必要な免責事項
「必要な免責事項」セクションすべての許可に対して:
- なぜ必要なのか(具体的な用途)
- どの時点で使用されるか
- データの保存/共有方法
- オプションか必須か
例:適切な許可フロー
コピーする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';}「プライバシー栄養ラベル」セクション
Copy to clipboardApp Storeのプライバシーラベルを正確に反映するようにする
- __CAPGO_KEEP_0__
- 購入履歴の収集
- 請求書のためのメールアドレス
- 不正行為防止のためのデバイスID
分析のための使用データ
2025年には不正確なプライバシーラベルが一般的な却下理由です。データ収集を慎重に検討してください。
提出前にチェックリスト
-
すべての購入フローのテスト
- 各サブスクリプションのレベルを購入してください
- 無料試用版をテストしてください
- 導入オファーが正しく適用されるかどうかを確認する
- 購入の復元をテストする
- Family Sharing (有効の場合) が正しく動作するかどうかを確認する
- 複数のデバイスでテストする
-
価格の一貫性を確認する
- App Store メタデータがインアプリ価格と一致するかどうかを確認する
- すべての通貨が正しいかどうかを確認する
- 無料試用期間の長さが説明と一致するかどうかを確認する
- 導入オファーの条件が正確であるかどうかを確認する
-
すべてのコピーを確認する
- プレースホルダー テキストを削除する
- すべての主張がテスト可能であるかどうかを確認する
- 文法とスペルの確認
- 説明が現在のビルドに合わせていることを確認する
- 競合他社の言及を削除する
-
権限のテスト
- 必要な権限のみを要求する
- 権限を要求する前に明確な説明を表示する
- 「拒否」フローをテストする (アプリはまだ動作するはず)
- Info.plistの説明が明確であることを確認する
-
テストアカウントの準備
- レビュー中に有効なまま残るレビュー用アカウントを作成する
- App Review情報にログインクレデンシャルを記載する
- レビュアーが支払い壁を通過して購入フローを完了できることを確認する
- 必要に応じて追加のアカウントやアプリ固有のスイッチをNotesフィールドに含める
-
__CAPGO_KEEP_0__
- メタデータを確認する
- スクリーンショットが現在の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.
__CAPGO_KEEP_0__
Section titled “Review Timeline”
標準レビュー: 24-48 時間 ピーク時期: 3-5 日 (App Store のホリデー リリース) 週末: レビューは処理されません 優先レビュー: 重要なバグ修正の場合に利用可能 (App Store Connect からリクエスト)
App Store Connect でよく見るステータス:
Waiting for ReviewIn ReviewPending Developer ReleaseRejected
2026 提出物の焦点
「2026 提出物の焦点」というセクション現在の焦点分野
「現在の焦点分野」というセクション1. サブスクリプションの明確性
- 両側のプラン比較が必要です
- 安いオプションを隠す「暗いパターン」はありません
- 明確なダウングレード/アップグレードパス
2. メタデータの正確性
- スクリーンショットはレビューされるビルドと一致する必要があります
- iPadスクリーンショットが必要です。iPadのサポートが有効になっている場合
- サポートURLとプライバシーポリシーは提出前にすでに公開されている必要があります
3. プライバシーとレビュー詳細の品質
- SDKが実際に収集するものと一致するプライバシー情報を提示する必要があります
- 初回提出時にアプリレビューの連絡先情報とメモが完了している必要があります
- デモクレデンシャルはレビュー期間中に有効なままにする必要があります
4. 提出の準備
- Appleは定期的に最低限のSDK要件を更新しているため、現在の締切を確認してリリースビルドをアップロードする前に
- TestFlightは提出前にレビュアーの正確なパスを確認する最も安全な場所です
ネイティブ購入プラグインのベストプラクティス
ネイティブ購入プラグインのベストプラクティスに関するセクション適切なエラーハンドリングを実装する
適切なエラー処理を実装する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> );}アプリが却下された場合
ロード中のステップロード中のステップ
ステップを解決する-
Appleの却下を丁寧に読みます
- 具体的なガイドラインを確認します (例: 3.1.1、5.1.1)
- Appleが指摘した問題を完全に理解します
-
問題を徹底的に修正します
- 問題の根本原因だけではなく、修正します
- 修正を徹底的にテストします
- 変更した内容をドキュメント化します
-
Resolution Centerで回答します
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時間以内にレビューされます
- 通常24時間以内にレビューされます
__CAPGO_KEEP_0__
__CAPGO_KEEP_0__却下が誤ったと考える場合:

- App Store Connectで「異議申し立て」をクリックします。
- 明確な証拠を提供します:
- 規定に準拠したスクリーンショット
- 特定のガイドラインへの参照
- 要件を満たしていることを説明します
- 専門的かつ事実に基づいた対応
- 機能が見つからない場合はテストアカウントを含める

追加リソース
追加リソースセクション- Apple App Store レビュー ガイドライン
- イン アプリ購入ガイドライン
- サブスクリプションのベスト プラクティス
- App Store Connect ヘルプ
- スクリーンショットの仕様
- プラットフォーム バージョン情報
サポート
サポートセクション問題が解決しない場合:
- Review the __CAPGO_KEEP_0__ ネイティブ購入のドキュメント
- 確認 一般的なトラブルシューティング
- Apple Developer Supportに連絡して、ガイドラインの明確化を求めます。
専門家の助けが必要ですか?
「専門家の助けが必要ですか?」というセクションアプリレビューに苦労しているか、個別の支援が必要ですか? チームと電話会議を予約してください 以下の専門的なサポートに
- IAPの実装レビューと最適化
- アプリストアのレビュー準備と戦略
- 提出物のチェックリストのレビュー
- 拒否解決と異議申し立て
- テストと検証の完了
私たちの専門家は、数百のアプリをレビューを通過させるのに成功しました!