asc-metadata-yaml
Skill4 starsChanged 6 months agoMITView on GitHub
Use whenever populating, editing, pushing, pulling, or auditing App Store Connect metadata for this app. The canonical source of truth lives at `./metadata/` as sectioned YAML files - one per ASC section (app info, version, categories, age rating, privacy, pricing, review info, IAP, subscriptions, screenshots, TestFlight, locales). Every `asc` push/pull and every App Store Connect web change must reconcile against these files. Triggers: "populate App Store", "fill metadata", "prepare for review", "update keywords", "sync App Store", "what''s missing from App Store", "push to ASC", "ready to submit", "create App Store listing", "metadata drift", any mention of a YAML file under `./metadata/`.
In this repository76 other files it gives its agents.
- AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- .cursor/rules/components.mdcCursor rule
- .cursor/rules/currency.mdcCursor rule
- .cursor/rules/design-system.mdcCursor rule
- .cursor/rules/file-structure.mdcCursor rule
- .cursor/rules/forbidden-patterns.mdcCursor rule
- .cursor/rules/mvvm-architecture.mdcCursor rule
- .cursor/rules/pricing-display.mdcCursor rule
- .cursor/rules/scope.mdcCursor rule
- .cursor/rules/swift-conventions.mdcCursor rule
- accessibilitySkill
- animationsSkill
- apple-developer-authSkill
- apple-signinSkill
- app-store-preflightSkill
- asc-app-create-uiSkill
- asc-aso-auditSkill
- asc-build-lifecycleSkill
- asc-cli-usageSkill
- asc-crash-triageSkill
- asc-id-resolverSkill
- asc-localize-metadataSkill
- asc-metadata-syncSkill
- asc-notarizationSkill
- asc-ppp-pricingSkill
- asc-release-flowSkill
- asc-revenuecat-catalog-syncSkill
- asc-screenshot-resizeSkill
- asc-shots-pipelineSkill
- asc-signing-setupSkill
- ascSkill
- asc-submission-healthSkill
- asc-subscription-localizationSkill
- asc-testflight-orchestrationSkill
- asc-wall-submitSkill
- asc-whats-new-writerSkill
- asc-workflowSkill
- asc-xcode-buildSkill
- billing-finance-calculatorSkill
- buildSkill
- business-modelSkill
- chartsSkill
- consolidate-errorsSkill
- content-composerSkill
- crashSkill
- debuggingSkill
- feature-directory-structureSkill
- feedback-statesSkill
- fix-errorSkill
- formsSkill
- foundation-modelsSkill
- hapticsSkill
- healthkitSkill
- layoutSkill
- listsSkill
- navigationSkill
- notificationsSkill
- onboarding-questionnaireSkill
- onboardingSkill
- The first 60 shown.
The file
We split this skill into the rules it gives an agent
10 rules. About 0 are common, 0 are distinctive, and 10 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈0
Distinctive · estimate
This author's own choices. Worth a look.
10
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 8
All App Store Connect metadata for this app is declared in sectioned YAML under ./metadata/.
- Very specific: line 29
Before asc metadata push — verify the YAML passes schema checks
- Very specific: line 30
After asc metadata pull — reconcile drift into the YAML
- Very specific: line 60
Read reference/apple-requirements.md to confirm the field exists, is required, and stays inside its character limit.
- Very specific: line 61
Read reference/sections.md to confirm the correct YAML file + asc push command.
- Very specific: line 62
Read reference/status.md to understand the _status block you'll be updating.
- Very specific: line 63
If copy is user-facing, also load the content-composer skill — banned phrases and voice rules apply.
- Very specific: line 68
Run asc metadata validate --dir ./metadata for the sections asc natively supports (app info + version localizations).
- Very specific: line 70
After each push, update _status.last_synced and flip _status.state to synced.
- Very specific: line 101
Do not edit the ASC web UI first: If someone else does, run asc metadata pull and reconcile — do not overwrite the YAML silently.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
App Store metadata (YAML source of truth)
All App Store Connect metadata for this app is declared in sectioned YAML under ./metadata/. Treat these files as the authoritative pre-population — App Store Connect is a downstream projection of this directory, never the reverse.
Why this exists
Populating App Store Connect manually on every release leaks state, wastes time, and loses locale parity. This skill replaces guessing with a versioned, reviewable pre-population:
- Every ASC field has a canonical home — one YAML file per ASC section.
- Every file tracks its own
_status— so we know what's synced, what's drafted, and what diverged. - Every push command is documented — the skill maps each section to the
ascsubcommand that pushes it, or flags it asmanual_onlywhen no API exists.
This skill never stores app-specific copy inline; it points at the files. Copy lives in ./metadata/, and any research should live in project-local references.
When to use
Invoke on any of these triggers:
- Creating or editing App Store copy, subtitle, keywords, description, promo text, or What's New
- Preparing a new version for submission (
asc release,asc submit) - Auditing whether ASC is in sync with the repo
- Adding a locale or an IAP/subscription
- Changing pricing, category, age rating, review info, or privacy declarations
- Before
asc metadata push— verify the YAML passes schema checks - After
asc metadata pull— reconcile drift into the YAML
Directory layout
metadata/
├── app.yaml # app identity (name, bundle, sku, primary locale, platforms, content rights)
├── version.yaml # current version info (versionString, copyright, releaseType, releaseDate)
├── categories.yaml # primary + secondary category
├── age-rating.yaml # age rating declarations
├── content-rights.yaml # third-party content declaration
├── encryption.yaml # export compliance (ITSAppUsesNonExemptEncryption + exemptions)
├── privacy.yaml # App Privacy (data categories × purposes × linkage × tracking)
├── pricing.yaml # price point + territory availability
├── review-info.yaml # review contact + demo account + reviewer notes
├── testflight.yaml # beta license, feedback email, beta description, review contact
├── screenshots.yaml # per-device-class manifests, paths to PNG/MP4 assets
├── locales/
│ ├── en-US.yaml # per-locale copy: subtitle, description, keywords, promo, whatsNew, URLs
│ └── <other-locales>.yaml
├── iap/
│ └── <product-id>.yaml # one file per IAP: type, price, review screenshot, localizations
├── subscriptions/
│ └── <group-ref-name>.yaml # one file per subscription group, with its subscriptions nested
├── status.yaml # auto-generated rollup (do not edit by hand)
└── README.md # link back to this skillBefore you edit anything
- Read
reference/apple-requirements.mdto confirm the field exists, is required, and stays inside its character limit. - Read
reference/sections.mdto confirm the correct YAML file +ascpush command. - Read
reference/status.mdto understand the_statusblock you'll be updating. - If copy is user-facing, also load the
content-composerskill — banned phrases and voice rules apply.
Before you push
asc auth doctor— authentication is live (uses the cookie session stored byapple-developer-auth).- Run
asc metadata validate --dir ./metadatafor the sections asc natively supports (app info + version localizations). - For sections asc does not cover (privacy, age rating, review info, IAP, subscriptions, screenshots, TestFlight), confirm the section's
_status.stateisreadyand follow the section-specific push command documented inreference/sections.md. - After each push, update
_status.last_syncedand flip_status.statetosynced.
Status model — short form
Each section YAML begins with:
_status:
state: draft # missing | draft | ready | synced | diverged | asc_only | manual_only | not_applicable
last_synced: null # ISO-8601 UTC timestamp of last successful push
last_source: local # local | asc
asc_id: null # ASC resource ID, once known
notes: "" # human explanation when state != syncedFull state machine + transitions: reference/status.md.
Workflow entry points
| Task | Command |
| Start from a blank slate | Copy reference/examples/ into ./metadata/ and fill in |
| Import current ASC state | asc metadata pull --app APP_ID --version X.Y.Z --dir ./metadata then reconcile |
| Audit drift | asc metadata validate --dir ./metadata + manual check for non-API sections |
| Push all synced-ready sections | See reference/workflow.md for the push recipe per section |
| Submit for review | asc release after all sections reach synced |
Full recipes live in reference/workflow.md.
Do not
- Do not edit the ASC web UI first. If someone else does, run
asc metadata pulland reconcile — do not overwrite the YAML silently. - Do not delete sections without an entry in the PR description explaining what they were replaced by.
- Do not inline copy into SKILL.md or code. Copy lives in
metadata/locales/. - Do not push a section whose
_status.stateisdraftormissing. Flip toreadyfirst. - Do not hand-edit
status.yaml— it is regenerated from the_statusblock in each section file.
Related skills
asc-metadata-sync— wraps theasc metadata pull/pushcommands (Phase 1: app-info + version localizations only)asc-aso-audit— Phase-1 offline ASO audit on the same./metadata/treeasc-whats-new-writer— writeswhatsNewintometadata/locales/*.yamlasc-localize-metadata— fans en-US copy out to other localesasc-release-flow— the submit sequence after metadata is readyapp-store-preflight— final preflight against this directorycontent-composer— enforced on every copy field
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
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.

