iOS App Store Optimization (ASO) Generator
This skill scans an iOS Swift/SwiftUI codebase and emits a single English-only ASO.md at the repo root containing paste-ready App Store metadata plus a research-notes appendix. It encodes Apple's 2025–2026 metadata rules, WWDC25 changes (App Store Tags, CPP organic keywords, SAP collapse), and a codebase-signal extraction taxonomy.
The whole searchable surface on the App Store is 160 characters total: App Name (30) + Subtitle (30) + Keywords (100). Everything else exists for conversion or browse — not search ranking. Get those 160 right and the rest follows.
Install
/plugin marketplace add https://github.com/conorluddy/ASOMarketplace /plugin install ios-aso-plugin
Then in any iOS project:
/ios-aso
When this skill applies
Trigger when you want to:
- Generate ASO metadata for a new iOS app
- Audit or improve an existing App Store listing
- Pick keywords from your codebase
- Choose a category, write a subtitle, draft a description, or prepare for submission
- Check metadata for rejection risk (2.3.7)
The skill assumes English (U.S.) primary locale. Cross-localization expansion (en-GB, en-AU, en-CA, es-MX) is offered as an optional appendix in the output.
Workflow
Step 1 — Confirm iOS project and find the brand
Confirm the working directory is an iOS project: look for *.xcodeproj, *.xcworkspace, or a Package.swift declaring an iOS platform.
Find the brand name in this precedence order:
fastlane/metadata/en-US/name.txt(if present, treat existing files as the source of truth and propose refinements rather than rewrites)CFBundleDisplayNamein the primary target'sInfo.plistCFBundleName- The Xcode target name
- The repo's README first heading
Step 2 — Scan the codebase for signals
Build a feature inventory by union-ing signals across Tier 1–4 sources:
- Tier 1:
Info.plist(NS*UsageDescriptionstrings),Localizable.strings/.xcstrings,fastlane/metadata, README - Tier 2:
*.entitlements,PrivacyInfo.xcprivacy, Xcode capabilities (widgets, Live Activities, App Clips, Background Modes) - Tier 3: App Intents (
AppIntent,AppShortcut), StoreKit IAPs, SwiftUI/UIKit view + module names, Core Data / SwiftData entities,Package.swift/ Podfile dependencies - Tier 4: Snapshot test names, accessibility identifiers
Tokenize all user-facing strings, frequency-rank after stop-word filtering, and produce a candidate keyword pool of 30–50 single words.
Step 3 — Synthesize the metadata
Pick the keyword set, not phrases. Choose 10–20 single-word tokens that recombine across Title + Subtitle + Keywords into the highest-relevance 2- and 3-word phrases. Apple combines words across those three fields within a locale to form search phrases. Tokens multiply; phrases don't.
Draft fields in this order:
- App Name (≤30 chars):
Brand: Keyword Phrase(colon is the most efficient separator). For new/indie apps put 1–2 of your strongest keywords here. - Subtitle (≤30 chars): A readable mini-sentence with 2–3 keyword tokens not used in the Name. Leave 1–2 chars headroom — the last word of a fully-packed subtitle occasionally fails to index.
- Keywords field (≤100 chars): Comma-separated, no spaces after commas. Single words only. Exclude every word already in Name, Subtitle, primary category, and Apple's stop-word list.
- Primary category: Drives browse placement AND is a text-relevance signal in search.
- Secondary category: Browse only.
- Promotional Text (≤170): Updatable anytime without a build — use for promos, new features, social proof.
- Description: First 170 chars are the hook (above the "more" fold). Then 5–10 benefit-led bullets.
- What's New: Template only.
- IAP names (≤30) and descriptions (≤45) for each detected StoreKit product.
- Screenshot caption suggestions — per WWDC25, captions feed Apple's AI tagging.
Step 4 — Validate against the rules
Hard rules:
- App Name ≤30 chars; Subtitle ≤30; Keywords ≤100
- Keywords field has no spaces after commas — Apple counts them
- No word appears in more than one of Name/Subtitle/Keywords (or in the primary category)
- No plurals of singular forms used elsewhere (Apple stems English;
climbandclimbsare duplicates) - Single words only in the Keywords field
Apple Review 2.3.7 rejection triggers (default-exclude):
- Trademarks the developer doesn't own
- Competitor brand names in the Keywords field
- Superlatives without proof:
#1,Best,Top,World's Best - Pricing language:
Free,50% Off,$0.99 - Generic catch-alls:
app,the,for,of,game,best,top - "AI" claims without genuine AI integration
Step 5 — Write ASO.md
The skill writes a 16-section output file:
| Section | Purpose |
|---|---|
| TL;DR | One-line summary of the strategy |
| App Name | Final with char count |
| Subtitle | Final with char count |
| Keywords | Final comma-separated string |
| Promotional Text | Updatable copy |
| Description | Full with fold-break marked |
| What's New | Template |
| IAPs | Names + descriptions per product |
| Categories | Primary + secondary |
| Screenshot Captions | Per-screen suggestions |
| Cross-Localization | Optional en-GB/AU/CA/MX appendix |
| Custom Product Pages | CPP keyword targets |
| ASA Seed | Apple Search Ads seed terms |
| Pre-Submission Checklist | 2.3.7 and hard-rule verification |
| Research Notes | Why each choice was made, citing codebase evidence |
| Candidate Pool | Every considered keyword with evidence, for iteration |
The Research Notes section is what you read to iterate — concrete evidence like "Picked workout because it appears 47× across Localizable.strings and the project depends on HealthKit."
Notes on the post-September-2025 keyword research landscape
The legacy Apple Search Ads "Search Popularity" score collapsed on Sept 29, 2025 — ~77% of U.S. keywords now floor to "5". Don't rely on it. Free signals that still work:
- App Store autocomplete (Apple-direct)
- App Store search results count + which apps rank for a term
- Apple Ads' beta Monthly Search Term Rank Report (limited to legacy SAP ≥ 35 terms)
If you have access to AppTweak / Sensor Tower / MobileAction / Appfigures / App Radar — cross-validate the skill's picks. The skill itself doesn't assume any paid tool.
Iteration
ASO is iterative. The skill produces a v1. Submit, wait ~4 weeks, track keyword rankings in App Store Connect Analytics, and replace bottom-quartile keywords with alternates from the Candidate Pool. Promotional Text refreshes every 30–90 days. Re-run the skill after major feature ships.