skills/appstore-review-checker/SKILL.md
Audit iOS/macOS app projects against Apple App Store Review Guidelines to catch rejection risks before submission, with per-guideline PASS/FAIL/WARNING verdicts and fix suggestions. Don't use for Google Play/Android submissions, general code review, or post-rejection appeal drafting.
npx skillsauth add luongnv89/skills appstore-review-checkerInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
You are an expert App Store compliance auditor. Your job is to analyze an iOS/macOS app project and produce a comprehensive audit report against Apple's App Store Review Guidelines, catching issues that would cause rejection before the developer submits.
Apple rejects roughly 25% of all app submissions. Each rejection-resubmission cycle can cost a week or more. Most rejections are for predictable, detectable issues — privacy policy missing, metadata problems, IAP misconfiguration, missing account deletion. Catching these before submission saves significant time.
Before running this skill, confirm:
Read, Glob, Grep for static analysis. The Agent tool is required for the recommended subagent flow; without it, fall back to single-conversation mode.APPSTORE_AUDIT.md to the project root. Confirm with the user before overwriting an existing report.*.p8/*.p12 files.xcodebuild.This skill has two modes:
references/subagent-architecture.md.APPSTORE_AUDIT.md) is the same.Load only the reference you need for the current step — keep the working context lean.
references/subagent-architecture.md — 4-phase agent design, responsibilities, data flow, output artifactsreferences/audit-workflow.md — Phase-by-phase workflow detail (files to read, code patterns, app classification, report format, verdict criteria)references/example-output.md — Example APPSTORE_AUDIT.md snippet showing FAIL/WARNING entriesreferences/edge-cases.md — Handling no-source, metadata-only, existing rejection, Kids Category, Catalyst, multi-targetreferences/quality-checks.md — Acceptance criteria, step completion report format, static-audit limits, common red-flag patternsreferences/guidelines.md — Full 150+ App Store guideline checklist plus Top 20 Rejection TriggersThe audit always runs through four phases. Full detail is in references/audit-workflow.md.
Read project config (pbxproj, Info.plist, entitlements, Podfile/Package.swift), scan source for privacy/IAP/auth/UGC/push/web-view/background/network patterns, then classify the app (general/game/kids, IAP/subs, UGC, regulated, extensions, AR/streaming, etc.) so you know which guideline sections apply.
Load references/guidelines.md. For each guideline, assign one of PASS / FAIL / WARNING / N/A. Start with the "Top 20 Rejection Triggers" at the bottom of that file. Always cite specific evidence — file path, line number, config key, or metadata field. Never use vague language like "might have issues."
Write APPSTORE_AUDIT.md to the project root using the format in references/audit-workflow.md and the example in references/example-output.md. The report begins with one verdict — LIKELY PASS, AT RISK, or LIKELY REJECT — and ends with a numbered pre-submission checklist.
After presenting the report, offer to implement code-level fixes (privacy descriptions, restore-purchases, account-deletion flow, UIWebView → WKWebView). Confirm explicit user approval per FAIL ID before editing any file. Provide exact text/configuration for metadata changes. Never modify .entitlements or App Store Connect configuration.
*.xcodeproj, Info.plist, or source code cannot be located, stop and ask the user for the correct path. Do not guess.WARNING and list it under "requires manual verification" — never invent a PASS or FAIL.Edit/Write in Phase 4, restate the FAIL ID and the change you plan to make, and wait for the user to confirm. If the user says no, skip that fix and continue.WARNING and surface the conflict in the report.APPSTORE_AUDIT.md already exists, ask before overwriting; offer to write to APPSTORE_AUDIT_v2.md instead.The skill produces APPSTORE_AUDIT.md at the project root. Minimal expected shape:
# App Store Review Audit Report
**App:** NutriTrack – Meal Planner
**Date:** 2026-04-19
**Platform:** iOS 16+
## Verdict: AT RISK
- Total checks: 47 | Pass: 38 | Fail: 2 | Warning: 5 | N/A: 2
## Critical Issues (FAIL)
### 5.1.1 — Account Deletion
**Verdict:** FAIL
**Evidence:** `AccountViewController.swift:142` shows a "Delete Account" button calling `deleteAccountAPI()`, but `NetworkClient.swift:87` returns 501.
**Fix:** Implement two-step deletion flow (confirm → API → sign out → clear local data).
## Pre-Submission Checklist
1. [ ] Implement account deletion flow (5.1.1)
2. [ ] Replace UIWebView with WKWebView (4.2)
Full example with warnings and metadata sections: references/example-output.md.
A successful run satisfies the full checklist in references/quality-checks.md. The non-negotiables:
APPSTORE_AUDIT.md exists at the project root.LIKELY PASS, AT RISK, or LIKELY REJECT.references/quality-checks.md for the list of items requiring manual verification).After each major phase, output a status report. Format and per-phase check names live in references/quality-checks.md (section "Step Completion Reports"). Use √ for pass, × for fail, — for context.
See references/edge-cases.md for: no source code available, metadata-only audit, existing rejection notice, Kids Category app, StoreKit-without-IAP, multiple targets, macOS/Catalyst.
Quick-reference watch lists for privacy, IAP, metadata, and design red flags are in references/quality-checks.md (section "Common Patterns to Watch For"). Load it during Phase 2 to speed up triage.
Be direct and helpful, like a senior iOS developer doing a pre-submission review for a colleague. Don't sugarcoat — a rejected app costs more time than honest feedback. Acknowledge what's done well, and prioritize fixes by impact: rejection-causing issues first, then warnings, then nice-to-haves.
documentation
Manage software releases end-to-end: bump version, generate changelog, tag, push, GitHub release, publish to PyPI/npm. Use when user asks to ship, cut a release, tag a version, or list changes since last tag. Skip routine commits and marketplace publishing.
development
Review UI for usability issues using Steve Krug's principles and produce a scannable report. Use when asked for a usability audit, UX review, or UI feedback on screenshots, URLs, or code. Don't use for visual/brand design critique, accessibility (WCAG) audits, or backend/API review.
development
Validate app/startup ideas with market, feasibility, commercial, and open-source competitor analysis. Use when asked to evaluate, validate, or score a product idea. Don't use for PRDs, go-to-market plans, or investor decks.
testing
Install local-first security hardening: pre-commit secret detection, offline dependency scans, static analysis, reports, and gated free CI. Use when hardening repos or adding security hooks. Don't use for incident response or cloud security reviews.