agentleFS
moasqmoasq/ios-dev-agent/.agents/skills/app-store-preflight/SKILL.md

app-store-preflight

Skill4 starsChanged 6 months agoMITView on GitHub

Use when preparing an iOS app for App Store review, responding to an Apple rejection, or auditing metadata, subscriptions, privacy manifests, entitlements, age rating, screenshots, TestFlight, IAP, pricing, review info, or design compliance. Runs asc validate commands plus local rejection-rule checks.

3 other projects use a version of this.

Adopted by

Most recently taken up by

The file

We split this skill into the rules it gives an agent

5 rules. 0 are common, 4 are distinctive, and 1 is very specific to this project.

  • 0

    Common

    Most of the 3 edited versions we read keep these.

  • 4

    Distinctive

    This author's own choices. Worth a look.

  • 1

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Run a two-layer preflight:

    line 8
  2. Distinctive:

    Run the canonical readiness checks first:

    line 38
  3. Distinctive:

    If a TestFlight build is part of the release:

    line 46
  4. Distinctive:

    Run these local checks in addition to ASC validation:

    line 79
  5. Very specific:

    After any patch, rerun the affected local rule and the relevant asc validate ...

    line 140

“Common” is measured: kept by at least 6 in 10 of the 3 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

App Store Preflight

Run a two-layer preflight:

  1. Canonical ASC validation with asc validate.
  2. Local rejection-risk audit using metadata, entitlements, privacy files, screenshots, subscription copy, and rule references.

This skill produces a ship/no-ship report with an ordered remediation plan.

Inputs

Resolve these from .agents/config/product.md, .asc/, metadata/, the Xcode project, or live asc reads before asking the user:

  • App ID
  • Bundle ID
  • Platform: usually IOS
  • Primary locale: en-US
  • Version: read from metadata/version.yaml, project.yml, or the user’s release target
  • Build ID: resolve with asc builds list --app <APP_ID> --output json if needed

Step 1: Tool Health

asc --version
asc doctor
asc auth status

Expected CLI: asc 1.4.0 or newer. If auth is broken, stop and route to asc-cli-usage or apple-developer-auth.

Step 2: Canonical ASC Validation

Run the canonical readiness checks first:

ASC_TIMEOUT=90s asc validate --app "<APP_ID>" --version "<VERSION>" --platform IOS --output markdown
asc validate subscriptions --app "<APP_ID>" --output markdown
asc validate iap --app "<APP_ID>" --output markdown

If a TestFlight build is part of the release:

asc validate testflight --app "<APP_ID>" --build "<BUILD_ID>" --output markdown

For CI/gating checks, rerun with --strict --output json --pretty and preserve the JSON findings.

Use ASC_TIMEOUT=90s for full app validation because screenshot-set fetches can exceed the default timeout. asc validate checks metadata length limits, required fields/localizations, review details, primary category, attached/processed build, encryption declaration, content rights, pricing/territory availability, screenshot presence and dimensions, subscription review readiness, promotional image guidance, and age rating completeness.

Step 3: Local App Store Rule Audit

Load applicable checklists from references/guidelines/by-app-type/:

App TypeChecklist
Every appreferences/guidelines/by-app-type/all_apps.md
Subscriptions / IAPreferences/guidelines/by-app-type/subscription_iap.md
AI / Generative AIreferences/guidelines/by-app-type/ai_apps.md if metadata or code mentions AI
Health & Fitnessreferences/guidelines/by-app-type/health_fitness.md if HealthKit appears
Social / UGCreferences/guidelines/by-app-type/social_ugc.md if user-generated content exists
Kids / Games / VPN / Crypto / macOSLoad only if the app actually fits

Then inspect rule files from:

  • references/rules/metadata/*.md
  • references/rules/subscription/*.md
  • references/rules/privacy/*.md
  • references/rules/design/*.md
  • references/rules/entitlements/*.md

Step 4: Local Project Checks

Run these local checks in addition to ASC validation:

  • Metadata: metadata/app-info/, metadata/version/, metadata/privacy.yaml, metadata/review-info.yaml, metadata/age-rating.yaml, metadata/encryption.yaml.
  • Screenshots: metadata/screenshots.yaml and every referenced PNG path under metadata/screenshots/.
  • Subscription catalog: metadata/subscriptions/*.yaml, active product IDs, review screenshots, intro offer disclosure, and archived SKU exclusion.
  • Paywall compliance: full renewal price, duration, auto-renew language, trial terms, Restore Purchases, Terms, Privacy Policy.
  • Privacy: the app's Info.plist, PrivacyInfo.xcprivacy if present, permission strings, and data collection claims.
  • Entitlements: project entitlements versus actual feature usage.
  • Localization: required en-US fields, keywords length, missing locale JSON, stale translations.
  • Build metadata: bundle version/build number consistency across Info.plist, Xcode project, and latest ASC build.

Step 5: Output Format

Return this shape:

## App Store Preflight

Status: BLOCKED | READY WITH WARNINGS | READY

### ASC Validate
- App version:
- Subscriptions:
- IAP:
- TestFlight:

### Blocking Issues
- [source] issue
  - Evidence:
  - Fix:
  - Recheck:

### Warnings
- [source] issue

### Passed
- check

### Next Command
`asc ...`

Order findings by release risk. Treat Apple-visible inaccuracies, missing review info, broken subscription disclosure, missing screenshots, unprocessed builds, privacy mismatch, or auth failures as blockers.

Autofix Policy

Safe to patch:

  • Metadata typo/length fixes in local metadata files.
  • Missing non-secret placeholder fields when the value is discoverable from config.
  • Local screenshot manifest paths when files exist.
  • Subscription wording in local metadata when it is mechanically derived from metadata/subscriptions/.

Do not auto-fix:

  • Pricing decisions.
  • Privacy claims not proven by code.
  • Legal URLs or support URLs not already configured.
  • Deleting or recreating ASC products.
  • AppTheme or paywall UI changes unless the user explicitly asks.

After any patch, rerun the affected local rule and the relevant asc validate ... command.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.