mcpField
C
capacitor-apple-review-preflight

capacitor-apple-review-preflight

github.com/cap-goテスト・品質73902 回インストール2 週間前に更新
リポジトリ

capacitor-apple-review-preflight について

Capacitor アプリの提出前監査を行い、Apple の審査要件とプロジェクト設定を確認するスキルです。提出準備や却下理由の調査に使え、根拠と修正案を優先度順にまとめます。

主な機能

  1. 01Apple 審査ルールの確認
  2. 02Capacitor と iOS ファイルの調査
  3. 03メタデータとプライバシーの監査
  4. 04根拠付きの優先順位付け
  5. 05審査メモの下書き

活用シーン

  1. 01App Store 提出前のアプリ確認
  2. 02App Review の却下理由の調査
  3. 03プライバシーマニフェストと権限の確認

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/cap-go/capgo-skills --skill capacitor-apple-review-preflight

インストール後、Claude Code で/capacitor-apple-review-preflightを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

metadata.json
references/guidelines/
README.md
references/guidelines/by-app-type/
ai_apps.md
all_apps.md
crypto_finance.md
games.md
health_fitness.md
kids.md
macos.md
social_ugc.md
subscription_iap.md
vpn.md
references/rules/design/
minimum_functionality.md
sign_in_with_apple.md
references/rules/entitlements/
unused_entitlements.md
references/rules/metadata/
accurate_metadata.md
apple_trademark.md
china_storefront.md
competitor_terms.md
subscription_metadata.md
references/rules/privacy/
privacy_manifest.md
unnecessary_data.md
references/rules/subscription/
misleading_pricing.md
missing_tos_pp.md

詳細

Capacitor Apple Review Preflight

Capacitor アプリの提出前または却下後に Apple の審査監査を実施し、優先順位を付けた、根拠に基づくレポートを返します。

このスキルは、truongduy2611/app-store-preflight-skills の Apple ガイドラインおよび却下ルールのコーパスを応用し、ワークフローを Capacitor 固有のプロジェクト検査に絞っています。

使用する場面

次の場合に使用します:

  • ユーザーが Capacitor アプリの App Store 審査前チェックを希望している。
  • ユーザーが App Review の却下、または App Store Connect のアップロード警告メールを受け取り、プロジェクトの監査を希望している。
  • メタデータ、エンタイトルメント、プライバシーマニフェスト、Sign in with Apple、サブスクリプション、AI 機能、または最低限の機能が審査を通過するかどうかをユーザーが尋ねている。
  • Capacitor での提出に向けた審査担当者用のメモ(デモアカウント、ライブアップデート、ハードウェア機能)をユーザーが希望している。

次の用途には使用しないでください:

  • Google Play のポリシーまたはデータセーフティ → capacitor-app-store(Android の参考資料)。
  • アーカイブ、アップロード、スクリーンショット、TestFlight → capacitor-app-store。
  • ウェブサイトを一からネイティブアプリのようにする → webapp-to-capacitor。
  • 審査ルールを超えたセキュリティ強化 → capacitor-security。

ライブプロジェクトのスナップショット

検出された Capacitor、認証、サブスクリプション、分析、プライバシー関連のパッケージ: !node -e "const fs=require('fs');if(!fs.existsSync('package.json'))process.exit(0);const pkg=JSON.parse(fs.readFileSync('package.json','utf8'));const sections=['dependencies','devDependencies'];const out=[];for(const section of sections){for(const [name,version] of Object.entries(pkg[section]||{})){if(name.startsWith('@capacitor/')||name.startsWith('@capgo/')||name.includes('firebase')||name.includes('sentry')||name.includes('revenuecat')||name.includes('purchase')||name.includes('subscription')||name.includes('auth')||name.includes('analytics')||name.includes('segment')||name.includes('amplitude')||name.includes('mixpanel')||name.includes('openai')||name.includes('anthropic')||name.includes('gemini'))out.push(section+'.'+name+'='+version)}}console.log(out.sort().join('\n'))"

Apple の審査に関連するファイルパス: !find . -maxdepth 6 -not -path '*/node_modules/*' \( -name 'package.json' -o -name 'capacitor.config.json' -o -name 'capacitor.config.ts' -o -name 'capacitor.config.js' -o -name 'Info.plist' -o -name '*.entitlements' -o -name 'PrivacyInfo.xcprivacy' -o -name 'SceneDelegate.swift' -o -name 'project.pbxproj' -o -path './ios' -o -path './fastlane/metadata' -o -path './metadata' \)

現在の Apple 要件(2026 年 10 月)

まず次の項目を確認してください。審査が始まる前にアップロードエラーの原因となります:

  • SDK:2026 年 4 月 28 日以降、アップロードするビルドには Xcode 26 以降/iOS 26 SDK を使用する必要があります。2027 年 4 月からは iOS 27 SDK(Xcode 27)が必須です。
  • UIScene:Xcode 27 でビルドするにはシーンライフサイクルが必要です。Capacitor 8.5 以降はこれをサポートしています。アプリには SceneDelegate.swift、Info.plist 内の UIApplicationSceneManifest、および AppDelegate 内の configurationForConnecting が必要です。導入後は、AppDelegate の application(_:open:options:)、continue userActivity、フォアグラウンド/バックグラウンドのコールバックが呼び出されなくなります。これらにあるカスタムネイティブコードはシーンデリゲートに移動する必要があります。
  • プライバシーマニフェスト:アプリコードで使用する必須理由 API について、アプリのターゲットに独自の PrivacyInfo.xcprivacy が必要です。Apple のプライバシーに影響するリストに含まれる SDK は、それぞれ独自のマニフェストと署名を同梱する必要があります(Capacitor core と CapacitorCordova はマニフェストを同梱しています)。
  • 年齢制限指定:更新された質問票(4+、9+、13+、16+、18+)に回答しないと、新しいバージョンを提出できません。
  • AI によるデータ共有:ガイドライン 5.1.2(i)(2025 年 11 月改訂)では、個人データをサードパーティの AI サービスに送信する前に、アプリ内で明確に開示し、明示的な許可を得ることが求められます。

手順

ステップ 1:対象範囲を確認

Apple の審査に関する作業のみを対象とします。タスクの大半がリリース手順に関するものであれば、capacitor-app-store に引き継いでください。却下理由が示されている場合は、まず該当するガイドラインを優先し、その後、関連するリスクを確認してください。

ステップ 2:アプリの種類を特定し、チェックリストを読み込む

references/guidelines/by-app-type/all_apps.md は必ず読んでください。次に、該当するチェックリストを追加します。

アプリに含まれるもの読み込むファイル
サブスクリプションまたは IAPsubscription_iap.md
UGC、チャット、ソーシャルフィードsocial_ugc.md
キッズカテゴリkids.md
健康、フィットネス、医療に関する表示health_fitness.md
ゲームgames.md
AI / LLM 機能ai_apps.md
暗号資産、取引、金融crypto_finance.md
VPN / ネットワークvpn.md
macOS にも配信macos.md

却下理由に特定のセクションが記載されている場合は、references/guidelines/README.md でガイドラインの全インデックスを確認してください。

ステップ 3:Capacitor プロジェクトと iOS プロジェクトを調査する

スナップショットから開始し、次を確認します。

  • 認証、分析、広告、決済、AI SDK を確認するため、package.json を調べます。
  • appId、server.url(リリースビルドでのリモート server.url は 4.2 / 2.5.2 のリスクです)、ライブアップデート設定を確認するため、capacitor.config.* を調べます。
  • プラグインが要求する可能性のあるすべての NS...UsageDescription、ITSAppUsesNonExemptEncryption、UIApplicationSceneManifest、UIBackgroundModes を確認するため、ios/App/App/Info.plist を調べます。
  • *.entitlements と実際に配信する機能を照合します。
  • PrivacyInfo.xcprivacy(アプリターゲットへの所属、必須理由 API、トラッキングドメイン)を確認します。
  • 存在する場合は、fastlane/metadata または metadata/ を調べます。

Capacitor 固有のリスク:

  • ネイティブの価値やモバイル UX を備えない、WebView のみのエクスペリエンス → 4.2。
  • ウェブサイトを読み込むリモートの server.url → 4.2 および 2.5.2。
  • 「Appleでサインイン」または同等のプライベートな選択肢がないソーシャルログイン → 4.8。
  • iOS ビルドで表示されるデジタル商品向けの Web 決済 → 3.1.1。
  • アプリの目的の変更や、審査対象外の機能の追加にライブアップデートを使用する場合 → ガイドライン 2.5.2 および Apple Developer Program License Agreement のインタープリタ型コードに関する条項。仕組みを開示し、アップデートを Web アセットの修正に限定してください。
  • Info.plist にプラグインの権限があり、説明文が曖昧またはコピーされたもの → 5.1.1。
  • Xcode で有効になっているものの未使用の機能(Push、iCloud、HealthKit、Associated Domains)。
ステップ 4:ルールに基づく確認を実施する

ルールファイルを正式な基準として使用します。

  • メタデータ:references/rules/metadata/*.md
  • サブスクリプション:references/rules/subscription/*.md
  • プライバシー:references/rules/privacy/*.md
  • デザイン:references/rules/design/*.md
  • エンタイトルメント:references/rules/entitlements/*.md
  • ビルド:references/rules/build/sdk_and_scene_lifecycle.md(Xcode / SDK の最低要件、UIScene)

メタデータルールを App Store のテキスト、スクリーンショット、プレビュー、審査メモに対応付けます。プライバシールールは Info.plist、マニフェスト、SDK、データフローに、デザインルールはナビゲーション、ネイティブの価値、ログインに、エンタイトルメントルールは有効な機能に対応付けます。

メタデータがローカルになく、asc CLI が設定済みの場合は、asc metadata pull --output-dir ./metadata で取得します。それ以外の場合はローカルのソースを監査し、メタデータの確認を一部のみ実施したものとして記録します。

ステップ 5:報告する
## Apple Review Preflight

### Rejections Found
- [GUIDELINE X.X.X] Issue summary
  - Evidence: file:line or metadata field
  - Why it matters for this Capacitor app
  - Fix: exact remediation

### Warnings
- [GUIDELINE X.X.X] Potential issue

### Passed
- [Category] Checks that looked clean

### Missing Inputs
- Metadata or assets not available locally

重大度の高い順に並べます。大幅な変更(機能の削除、認証や課金の変更)を行う前に報告し、その判断が必要な段階でユーザーに確認してください。

ステップ 6:審査メモとフォローアップ

デモアカウント、非表示またはハードウェアに依存する機能、サブスクリプションのテスト手順、AI のモデレーションとデータ共有への同意、ライブアップデートの動作(Web アセットのみ。ネイティブの変更はなし)、および特別なエンタイトルメントやバックグラウンドモードの理由について、メモを作成します。

検証

  • 却下に関する指摘すべてに、具体的な修正が適用されているか、担当者または判断が明示されています。
  • plutil -lint ios/App/App/Info.plist ios/App/App/PrivacyInfo.xcprivacy が成功します。
  • PrivacyInfo.xcprivacy が App ターゲットに含まれています(project.pbxproj に Resources ビルドフェーズ内の記載があることを確認します)。
  • grep -c "UsageDescription" ios/App/App/Info.plist の結果が、プラグインが要求する可能性のある権限と一致します。
  • リリースビルドがアーカイブされ、ITMS 警告なしで Xcode Organizer で検証されます。
  • クリーンインストール後、デモアカウントで本番バックエンドにログインできます。

エラー処理

入力対応
カテゴリ名を含む ITMS-91053「API 宣言の不足」NSPrivacyAccessedAPIType と承認済みの理由をアプリのマニフェスト(references/rules/privacy/privacy_manifest.md)に追加します
SDK 名を示す ITMS-91061「プライバシーマニフェストの不足」バンドル済みのマニフェストを含むバージョンに SDK/プラグインを更新します。SDK の慣行をアプリのマニフェストに貼り付けないでください
ITMS-90683「目的文字列の不足」指定されたキーに具体的な目的文字列を追加します
ラッパーアプリに対するガイドライン 4.2 の却下最も重大な問題として扱います。具体的なネイティブ機能と UX の不足を列挙します。審査担当者のメモだけで回答しないでください
ガイドライン 4.8「Apple でサインイン」を追加します(@capgo/capacitor-social-login は apple をサポートしています)。または、4.8 の基準を満たす同等のオプションを追加します
ガイドライン 5.1.1(v)アプリ内アカウント削除を追加します(サポートメールだけでは不十分です)
メタデータが利用できず、asc もないコード監査を続行し、メタデータの確認は一部のみ完了と記録します
サードパーティ SDK で必須理由 API が示されている準拠していると判断する前に、各 SDK にバンドルされたマニフェストを確認します

コメント