app-store-preflight-skills
git clone https://github.com/truongduy2611/app-store-preflight-skills
git clone --depth=1 https://github.com/truongduy2611/app-store-preflight-skills ~/.claude/skills/truongduy2611-app-store-preflight-skills-app-store-preflight-skills
SKILL.mdApp Store Preflight Skill
Run pre-submission checks on your iOS/macOS project to catch common App Store rejection patterns.
Prerequisites
- asc CLI — Install via Homebrew:
(App-Store-Connect-CLI)brew install asc - ASC CLI Skills — app-store-connect-cli-skills for
usage patternsasc - jq — Optional, but used by some JSON-inspection examples in the rule docs
Step 1: Identify App Type → Load Checklist
Determine which guidelines apply by loading the relevant checklist from
references/guidelines/by-app-type/. Always start with all_apps.md, then add the app-type-specific one:
| App Type | Checklist |
|---|---|
| Every app | |
| Subscriptions / IAP | |
| Social / UGC | |
| Kids Category | |
| Health & Fitness | |
| Games | |
| macOS | |
| AI / Generative AI | |
| Crypto & Finance | |
| VPN | |
Full guideline index:
references/guidelines/README.md
Step 2: Pull Metadata for Inspection
Pull the latest App Store metadata using the
asc CLI:
# Pull canonical metadata JSON for the version you want to review asc metadata pull --app "<APP_ID>" --version "<VERSION>" --dir ./metadata
asc metadata pull writes app info files to ./metadata/app-info/*.json and
version-localization files to ./metadata/version/<VERSION>/*.json.
Most rule examples below assume the canonical JSON layout written by
asc metadata pull.
If you already have metadata in another layout (for example fastlane
metadata/), either adapt the file-path examples to that structure or pull the
canonical asc layout first.
Step 3: Run Rejection Rule Checks
For each category, load the relevant rule files from
references/rules/ and inspect. Each rule contains: What to Check, How to Detect, Resolution, and Example Rejection.
| Category | Rule Files |
|---|---|
| Metadata | |
| Subscription | |
| Privacy | |
| Design | |
| Entitlements | |
Step 4: Report Findings
Produce a summary report using this template:
## Preflight Report ### ❌ Rejections Found (N) - [GUIDELINE X.X.X] Description of issue - File: path/to/offending/file - Fix: What to do ### ⚠️ Warnings (N) - [GUIDELINE X.X.X] Potential issue ### ✅ Passed (N) - [Category] All checks passed
Order by severity: rejections first, then warnings, then passed.
Step 5: Autofix + Validate
Some issues can be auto-fixed:
- Competitor terms → Suggest replacement text with competitor names removed
- Metadata character limits → Show current vs. max length
- Missing links → Generate template ToS/PP URLs
After applying any auto-fix, re-run the affected checks to confirm the fix resolved the violation. Only mark as resolved once the re-scan passes.
For issues requiring manual intervention (screenshots, UI redesign), provide clear instructions but do not auto-fix.
Gotchas
- China storefront — Banned AI terms (ChatGPT, Gemini, etc.) are checked across ALL locales, not just
. Apple checks every locale visible in the China storefront.zh-Hans - Privacy manifests —
is required even if your app doesn't call Required Reason APIs directly. Third-party SDKs (Firebase, Amplitude, etc.) that usePrivacyInfo.xcprivacy
orUserDefaults
trigger this requirement transitively.NSFileManager - asc auth —
requires App Store Connect authentication. Runasc metadata pull
first, or setasc auth login
,ASC_KEY_ID
, and one ofASC_ISSUER_ID
/ASC_PRIVATE_KEY_PATH
/ASC_PRIVATE_KEY
. If you're unsure whatASC_PRIVATE_KEY_B64
is picking up, runasc
.asc auth doctor - Subscription metadata — Apple requires ToS/PP links in BOTH the App Store description AND the in-app subscription purchase screen. Missing either one is a separate rejection.
- macOS entitlements — Apple will ask you to justify every temporary exception entitlement (
). Remove entitlements you don't actively use.com.apple.security.temporary-exception.*
Adding New Rules
Create a
.md file in the appropriate references/rules/ subdirectory:
# Rule: [Short Title] - **Guideline**: [Apple Guideline Number] - **Severity**: REJECTION | WARNING - **Category**: metadata | subscription | privacy | design | entitlements ## What to Check ## How to Detect ## Resolution ## Example Rejection