Capacitor Apple Review Preflight
Run a pre-submission or post-rejection Apple review audit for a Capacitor app.
This skill adapts the Apple guideline and rejection-rule corpus from truongduy2611/app-store-preflight-skills and narrows the workflow to Capacitor-specific project inspection.
When to Use This Skill
- User wants an Apple App Store review preflight for a Capacitor app
- User received an Apple rejection and wants the project audited against likely guideline failures
- User wants to check metadata, entitlements, privacy manifests, Sign in with Apple, subscriptions, or minimum functionality before submission
- User wants reviewer-notes guidance for a Capacitor iOS submission
Live Project Snapshot
Detected Capacitor, auth, subscription, analytics, and privacy-related packages:
!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'))out.push(section+'.'+name+'='+version)}}console.log(out.sort().join('\n'))"
Relevant Apple review file paths:
!find . -maxdepth 6 \( -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 'project.pbxproj' -o -path './ios' -o -path './fastlane/metadata' -o -path './metadata' \)
Procedure
Step 1: Confirm This Is the Right Review Scope
Use this skill for Apple-facing review work, not for generic publishing.
If the task is mostly about screenshots, release setup, or store upload mechanics, combine this skill with capacitor-app-store.
Step 2: Identify App Type and Load the Right Checklist
Always read:
references/guidelines/by-app-type/all_apps.md
Then add the checklist that matches the app:
subscription_iap.md for subscriptions or IAP
social_ugc.md for UGC or moderation-heavy apps
kids.md for Kids Category
health_fitness.md for health, fitness, or medical claims
games.md for games
ai_apps.md for AI or LLM features
crypto_finance.md for crypto, trading, or financial workflows
vpn.md for VPN and networking apps
macos.md only when the submission also targets macOS
Use references/guidelines/README.md for the full guideline index when a rejection cites a specific section.
Step 3: Inspect Capacitor and iOS Project State
Start from the injected snapshot above, then inspect:
package.json for Capacitor, auth, analytics, subscription, and SDK dependencies
capacitor.config.* for app identifiers, app name, web asset config, and live update settings
ios/App/App/Info.plist or the project-specific Info.plist
- any
*.entitlements files
PrivacyInfo.xcprivacy if present
fastlane/metadata or other local metadata directories if they exist
Pay special attention to Capacitor-specific Apple review risks:
- social login providers without a Sign in with Apple path when required
- heavy WebView-only apps that may trigger 4.2 minimum functionality concerns
- third-party SDKs that imply Required Reason API declarations or privacy disclosures
- native capabilities enabled in Xcode but not justified by shipped functionality
- Capgo, Appflow, or other live-update flows that need clear reviewer notes and compliance boundaries
- missing or vague usage strings for camera, photo library, microphone, location, notifications, Face ID, tracking, or local network access
Step 4: Run Rule-Based Review Passes
Use the upstream rule files as the source of truth:
- metadata:
references/rules/metadata/*.md
- subscription:
references/rules/subscription/*.md
- privacy:
references/rules/privacy/*.md
- design:
references/rules/design/*.md
- entitlements:
references/rules/entitlements/*.md
Map them onto the Capacitor app:
- metadata rules against App Store text, screenshots, preview videos, and review notes
- privacy rules against
Info.plist, privacy manifests, SDK usage, and data collection flows
- design rules against app navigation, native value, login flows, and reviewer accessibility
- entitlements rules against enabled capabilities in the iOS project
If App Store metadata is not stored locally and asc is available, pull it with asc metadata pull --output-dir ./metadata. If not, audit local metadata sources and state what remains unverified.
Step 5: Produce a Capacitor-Focused Preflight Report
Use this format:
## Apple Review Preflight
### Rejections Found
- [GUIDELINE X.X.X] Issue summary
- Evidence: file or metadata location
- 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 review assets that were not available locally
Order findings by severity and make each fix concrete.
Step 6: Suggest Reviewer Notes and Submission Follow-Ups
When relevant, draft reviewer notes for:
- demo accounts or test credentials
- hidden or non-obvious features
- hardware dependencies
- subscription test flows
- AI moderation or content controls
- live-update behavior and what code can change post-review
- reasons for special entitlements or network behavior
Error Handling
- If app metadata is unavailable locally and
asc is not configured, continue with the code and project audit and clearly mark metadata checks as partial.
- If the app is mostly a thin web wrapper, call out guideline 4.2 risk directly rather than burying it in warnings.
- If social login is present, verify whether guideline 4.8 requires Sign in with Apple before concluding the auth flow is review-safe.
- If third-party SDKs suggest Required Reason API usage, inspect
PrivacyInfo.xcprivacy before assuming privacy compliance.
- If the user is asking how to fix a specific rejection, prioritize the cited guideline and only then expand to adjacent risks.
1---2name: capacitor-apple-review-preflight3description: Guides the agent through an Apple App Store preflight review for Capacitor apps before submission or after rejection. Covers guideline checklist selection, App Store metadata review, Capacitor and iOS project inspection, privacy manifests, Sign in with Apple, entitlements, and common rejection patterns. Do not use for Google Play review, generic store publishing only, or non-Apple mobile runtimes.4---5
6# Capacitor Apple Review Preflight
7
8Run a pre-submission or post-rejection Apple review audit for a Capacitor app.
9
10This skill adapts the Apple guideline and rejection-rule corpus from [truongduy2611/app-store-preflight-skills](https://github.com/truongduy2611/app-store-preflight-skills) and narrows the workflow to Capacitor-specific project inspection.
11
12## When to Use This Skill
13
14- User wants an Apple App Store review preflight for a Capacitor app
15- User received an Apple rejection and wants the project audited against likely guideline failures
16- User wants to check metadata, entitlements, privacy manifests, Sign in with Apple, subscriptions, or minimum functionality before submission
17- User wants reviewer-notes guidance for a Capacitor iOS submission
18
19## Live Project Snapshot
20
21Detected Capacitor, auth, subscription, analytics, and privacy-related packages:
22!`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'))out.push(section+'.'+name+'='+version)}}console.log(out.sort().join('\n'))"`
23
24Relevant Apple review file paths:
25!`find . -maxdepth 6 \( -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 'project.pbxproj' -o -path './ios' -o -path './fastlane/metadata' -o -path './metadata' \)`
26
27## Procedure
28
29### Step 1: Confirm This Is the Right Review Scope
30
31Use this skill for Apple-facing review work, not for generic publishing.
32
33If the task is mostly about screenshots, release setup, or store upload mechanics, combine this skill with `capacitor-app-store`.
34
35### Step 2: Identify App Type and Load the Right Checklist
36
37Always read:
38
39- `references/guidelines/by-app-type/all_apps.md`
40
41Then add the checklist that matches the app:
42
43- `subscription_iap.md` for subscriptions or IAP
44- `social_ugc.md` for UGC or moderation-heavy apps
45- `kids.md` for Kids Category
46- `health_fitness.md` for health, fitness, or medical claims
47- `games.md` for games
48- `ai_apps.md` for AI or LLM features
49- `crypto_finance.md` for crypto, trading, or financial workflows
50- `vpn.md` for VPN and networking apps
51- `macos.md` only when the submission also targets macOS
52
53Use `references/guidelines/README.md` for the full guideline index when a rejection cites a specific section.
54
55### Step 3: Inspect Capacitor and iOS Project State
56
57Start from the injected snapshot above, then inspect:
58
59- `package.json` for Capacitor, auth, analytics, subscription, and SDK dependencies
60- `capacitor.config.*` for app identifiers, app name, web asset config, and live update settings
61- `ios/App/App/Info.plist` or the project-specific `Info.plist`
62- any `*.entitlements` files
63- `PrivacyInfo.xcprivacy` if present
64- `fastlane/metadata` or other local metadata directories if they exist
65
66Pay special attention to Capacitor-specific Apple review risks:
67
68- social login providers without a Sign in with Apple path when required
69- heavy WebView-only apps that may trigger 4.2 minimum functionality concerns
70- third-party SDKs that imply Required Reason API declarations or privacy disclosures
71- native capabilities enabled in Xcode but not justified by shipped functionality
72- Capgo, Appflow, or other live-update flows that need clear reviewer notes and compliance boundaries
73- missing or vague usage strings for camera, photo library, microphone, location, notifications, Face ID, tracking, or local network access
74
75### Step 4: Run Rule-Based Review Passes
76
77Use the upstream rule files as the source of truth:
78
79- metadata: `references/rules/metadata/*.md`
80- subscription: `references/rules/subscription/*.md`
81- privacy: `references/rules/privacy/*.md`
82- design: `references/rules/design/*.md`
83- entitlements: `references/rules/entitlements/*.md`
84
85Map them onto the Capacitor app:
86
87- metadata rules against App Store text, screenshots, preview videos, and review notes
88- privacy rules against `Info.plist`, privacy manifests, SDK usage, and data collection flows
89- design rules against app navigation, native value, login flows, and reviewer accessibility
90- entitlements rules against enabled capabilities in the iOS project
91
92If App Store metadata is not stored locally and `asc` is available, pull it with `asc metadata pull --output-dir ./metadata`. If not, audit local metadata sources and state what remains unverified.
93
94### Step 5: Produce a Capacitor-Focused Preflight Report
95
96Use this format:
97
98```markdown
99## Apple Review Preflight
100
101### Rejections Found
102- [GUIDELINE X.X.X] Issue summary
103 - Evidence: file or metadata location
104 - Why it matters for this Capacitor app
105 - Fix: exact remediation
106
107### Warnings
108- [GUIDELINE X.X.X] Potential issue
109
110### Passed
111- [Category] Checks that looked clean
112
113### Missing Inputs
114- Metadata or review assets that were not available locally
115```
116
117Order findings by severity and make each fix concrete.
118
119### Step 6: Suggest Reviewer Notes and Submission Follow-Ups
120
121When relevant, draft reviewer notes for:
122
123- demo accounts or test credentials
124- hidden or non-obvious features
125- hardware dependencies
126- subscription test flows
127- AI moderation or content controls
128- live-update behavior and what code can change post-review
129- reasons for special entitlements or network behavior
130
131## Error Handling
132
133- If app metadata is unavailable locally and `asc` is not configured, continue with the code and project audit and clearly mark metadata checks as partial.
134- If the app is mostly a thin web wrapper, call out guideline 4.2 risk directly rather than burying it in warnings.
135- If social login is present, verify whether guideline 4.8 requires Sign in with Apple before concluding the auth flow is review-safe.
136- If third-party SDKs suggest Required Reason API usage, inspect `PrivacyInfo.xcprivacy` before assuming privacy compliance.
137- If the user is asking how to fix a specific rejection, prioritize the cited guideline and only then expand to adjacent risks.