skills/generators/app-icon-generator/SKILL.md
Generates an app icon for macOS or iOS — a fast CoreGraphics placeholder and/or flat layered source art to finish in Icon Composer (the Liquid Glass / iOS 26+ standard). Produces appearance variants (light/dark/tinted) and installs into the asset catalog. Use when the user wants to create, generate, iterate, or update an app icon.
npx skillsauth add rshankras/claude-code-apple-skills app-icon-generatorInstall 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.
Generate an app icon programmatically with a CoreGraphics Swift script, resize it to every required size, and install it into the Xcode asset catalog — with appearance variants (light/dark/tinted).
Apple icon standards verified as of July 2026 — Icon Composer, Xcode 26, macOS Tahoe 26.4+. This guidance is static (the skill does no per-run web lookup); if that date is well in the past or the OS has moved on, re-verify against the HIG · App icons before trusting the specifics below.
Apple's shippable icon format changed. On iOS 26 / macOS 26 the modern app icon is a layered, light-responsive Liquid Glass icon authored in Icon Composer (free; ships with Xcode 26, needs macOS Tahoe 26.4+). You supply flat artwork in up to four depth groups (background → foreground); the system renders the glass — specular highlights, refraction, translucency, shadows — and masks the rounded-rect shape. One .icon file adapts across iPhone, iPad, Mac, and Apple Watch and across Default / Dark / Mono (tinted) appearances.
So this skill does NOT produce the final iOS 26 icon. Icon Composer is GUI-first; no script can author a true layered .icon. Its two honest roles are:
.icon.What changed vs. the classic flow:
drawShine/drawShadow blocks below are legacy-only, off by default for iOS 26+ targets.)Detect the target first: read the deployment target (IPHONEOS_DEPLOYMENT_TARGET / MACOSX_DEPLOYMENT_TARGET in the pbxproj, or .planning/APP.md). iOS 26+ / macOS 26+ → lead with the Icon Composer handoff and treat the flat PNG as a placeholder. Older targets → the classic flat + appearances path is fine to ship. If the deployment target is newer than the "verified as of" date above, flag it to the user and re-verify the icon rules against the current HIG before generating — the skill won't know about anything Apple shipped after that date.
Use this skill when the user:
Glob: **/Assets.xcassets/AppIcon.appiconset/Contents.json
Contents.json to understand required sizesGather app information to customize the icon:
Read: .planning/APP.md (if exists — app definition)
Read: .planning/CODEBASE.md (if exists — app description)
Grep: "CFBundleName" or app name in project files
If no planning files exist, ask the user.
Ask via AskUserQuestion:
"What category best describes your app?"
"What visual style do you prefer?"
"What color palette fits your app?"
"What accent color for the focal element?"
Read apple-hig-icons.md before generating.
Timeless rules (all eras):
Liquid Glass era rules (iOS 26 / macOS 26):
Design-layer guidance from Apple's icon sessions (WWDC25) plus evergreen craft tests. The numbered rules above are the hard constraints; this is how to make the artwork good.
Author three variants — default, dark, mono — and the system derives six renders: default, dark, clear light/dark, tinted light/dark. Preview all six before shipping.
.icon into Xcode.Based on the user's answers (or app context), select:
Create a self-contained Swift script at scripts/generate-icon.swift that:
import AppKit and CoreGraphics (no dependencies)icon-variants/ directoryScript structure:
#!/usr/bin/env swift
import AppKit
import CoreGraphics
let size: CGFloat = 1024
// ... helper functions (gradients, glows, shapes)
// ... variant generation functions
// ... save and output
Design building blocks (combine these based on category/style):
| Building Block | Function | Use For |
|---------------|----------|---------|
| drawGradientBackground | Linear gradient fill | All icons |
| drawRadialGlow | Soft colored glow behind focal element | Adding depth |
| drawCircle | Filled/stroked circle | Record buttons, dots, orbs |
| drawRoundedRect | Rounded rectangle | Screens, cards, containers |
| drawRing | Circle outline | Borders, focus rings |
| drawBrackets | Corner bracket marks | Viewfinders, capture |
| drawMonitor | Screen + stand shape | Screen/display apps |
| drawShield | Shield outline | Security/privacy apps |
| drawGear | Gear/cog shape | Settings/utility apps |
| drawWaveform | Audio waveform bars | Audio/music apps |
| drawDocument | Page with fold corner | Document/writing apps |
| drawShine | Elliptical specular highlight | ⚠️ Legacy only — off for iOS 26+ (system paints its own specular) |
| drawShadow | Drop shadow beneath element | ⚠️ Legacy only — off for iOS 26+ (system casts its own shadow) |
swift scripts/generate-icon.swift
Show all 3 variants to the user using the Read tool (Claude can view images). Ask the user to pick one, or request adjustments.
Once the user picks a variant:
sips (built into macOS):For macOS (10 sizes):
sips -z 16 16 master.png --out icon_16x16.png
sips -z 32 32 master.png --out [email protected]
sips -z 32 32 master.png --out icon_32x32.png
sips -z 64 64 master.png --out [email protected]
sips -z 128 128 master.png --out icon_128x128.png
sips -z 256 256 master.png --out [email protected]
sips -z 256 256 master.png --out icon_256x256.png
sips -z 512 512 master.png --out [email protected]
sips -z 512 512 master.png --out icon_512x512.png
sips -z 1024 1024 master.png --out [email protected]
For iOS (single 1024x1024):
cp master.png icon_1024x1024.png
For macOS:
{
"images": [
{ "filename": "icon_16x16.png", "idiom": "mac", "scale": "1x", "size": "16x16" },
{ "filename": "[email protected]", "idiom": "mac", "scale": "2x", "size": "16x16" },
{ "filename": "icon_32x32.png", "idiom": "mac", "scale": "1x", "size": "32x32" },
{ "filename": "[email protected]", "idiom": "mac", "scale": "2x", "size": "32x32" },
{ "filename": "icon_128x128.png", "idiom": "mac", "scale": "1x", "size": "128x128" },
{ "filename": "[email protected]", "idiom": "mac", "scale": "2x", "size": "128x128" },
{ "filename": "icon_256x256.png", "idiom": "mac", "scale": "1x", "size": "256x256" },
{ "filename": "[email protected]", "idiom": "mac", "scale": "2x", "size": "256x256" },
{ "filename": "icon_512x512.png", "idiom": "mac", "scale": "1x", "size": "512x512" },
{ "filename": "[email protected]", "idiom": "mac", "scale": "2x", "size": "512x512" }
],
"info": { "author": "xcode", "version": 1 }
}
For iOS (single size, system generates others):
{
"images": [
{ "filename": "icon_1024x1024.png", "idiom": "universal", "platform": "ios", "size": "1024x1024" }
],
"info": { "author": "xcode", "version": 1 }
}
xcodebuild build -scheme <scheme> -destination 'platform=<platform>' -quietAppearance variants (iOS 18+, scriptable). For the flat path, generate three 1024 PNGs — light (default), dark, and a monochrome/tinted mark — and declare them so the icon adapts to the user's Home screen:
{
"images": [
{ "filename": "icon_light.png", "idiom": "universal", "platform": "ios", "size": "1024x1024" },
{ "filename": "icon_dark.png", "idiom": "universal", "platform": "ios", "size": "1024x1024",
"appearances": [ { "appearance": "luminosity", "value": "dark" } ] },
{ "filename": "icon_tinted.png", "idiom": "universal", "platform": "ios", "size": "1024x1024",
"appearances": [ { "appearance": "luminosity", "value": "tinted" } ] }
],
"info": { "author": "xcode", "version": 1 }
}
Icon Composer handoff (iOS 26+ / the shippable icon). The flat PNGs above are a placeholder. For the real Liquid Glass icon:
.icon and add it to the target (it replaces the AppIcon set). Icon Composer also exports a flattened 1024 PNG for App Store marketing.This is a manual GUI step by design — the skill prepares the layers and hands off; it does not author the .icon.
An icon that "looks fine" as a 1024px file on a neutral canvas can still fail on a real Home Screen. All three checks below caught real shipped bugs:
sips -Z 120 each variant and Read the small render — that's the size users see. Subtle contrast that survives at 1024 dies at 60.scripts/generate-icon.swift for future regenerationicon-variants/ directory (or add to .gitignore)>_, code braces {}, or gearAfter completion, report:
Icon installed!
Type: [placeholder flat icon | classic icon + appearances]
Master: scripts/generate-icon.swift (re-run to regenerate)
Sizes: [list] · appearances: [light/dark/tinted]
Location: [path to AppIcon.appiconset]
⚠️ For an iOS 26+ / macOS 26+ target this is a PLACEHOLDER. Finish the real
Liquid Glass icon in Icon Composer (see the handoff step) before submitting.
Build and run to see it: Home screen (iOS) · menu bar / Finder / Spotlight (macOS).
If the user wants changes:
swift scripts/generate-icon.swiftCommon adjustment requests:
development
US web checkout via the StoreKit External Purchase Link entitlement — currently 0% Apple commission (litigation ongoing), how to ship it safely, and how to architect for a commission flip so a future ruling is a config change, not a rewrite. Use when adding external purchase links, weighing web checkout vs IAP, or planning US-storefront pricing strategy.
tools
Revenue beyond the single-app price tag — own-app bundles, Family Sharing as a conversion lever, cross-developer bundles & suites, and institutional licensing via Group Purchases / Apple School & Business Manager. Use when a developer has multiple apps, a subscription worth sharing, complementary indie partners, or school/clinic/business buyers.
testing
Run a structured accessibility audit on an iOS/macOS app — automated XCUITest audits, Accessibility Inspector, manual VoiceOver/Dynamic Type passes, and App Store Accessibility Nutrition Label evaluation. Use before release, when preparing Nutrition Label declarations, or for EU Accessibility Act compliance.
tools
Stage-by-stage audit of an app's App Store growth machinery against a 54-item P0–P9 playbook — every item scored from an App Store Connect MCP call, a codebase check, or an explicit question to the user, then routed to the skill or command that fixes it. Read-only on App Store Connect. Use for a growth audit or scorecard, a pre-launch growth plan, a quarterly re-audit, or "which growth levers am I missing."