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 skills add https://github.com/rshankras/claude-code-apple-skills --skill app-icon-generator
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):
10. Layer, don't flatten (final icon) — organize art into ≤4 depth groups for Icon Composer; SVG for shapes, PNG only for texture.
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:
Integration with protocols.io API for managing scientific protocols. This skill should be used when working with protocols.io to search, create, update, or publish protocols; manage protocol steps and materials; handle discussions and comments; organize workspaces; upload and manage files; or integrate protocols.io functionality into workflows. Applicable for protocol discovery, collaborative protocol development, experiment tracking, lab protocol management, and scientific documentation.
Analyzes job descriptions and generates tailored resumes that highlight relevant experience, skills, and achievements to maximize interview chances
Generate Excalidraw diagrams from natural language descriptions. Use when asked to "create a diagram", "make a flowchart", "visualize a process", "draw a system architecture", "create a mind map", or "generate an Excalidraw file". Supports flowcharts, relationship diagrams, mind maps, and system architecture diagrams. Outputs .excalidraw JSON files that can be opened directly in Excalidraw.
Build and distribute Expo development clients locally or via TestFlight
Use when you have a written implementation plan to execute in a separate session with review checkpoints
Data structure for annotated matrices in single-cell analysis. Use when working with .h5ad files or integrating with the scverse ecosystem. This is the data format skill—for analysis workflows use scanpy; for probabilistic models use scvi-tools; for population-scale queries use cellxgene-census.
Benchling R&D platform integration. Access registry (DNA, proteins), inventory, ELN entries, workflows via API, build Benchling Apps, query Data Warehouse, for lab data management automation.
Comprehensive molecular biology toolkit. Use for sequence manipulation, file parsing (FASTA/GenBank/PDB), phylogenetics, and programmatic NCBI/PubMed access (Bio.Entrez). Best for batch processing, custom bioinformatics pipelines, BLAST automation. For quick lookups use gget; for multi-service integration use bioservices.
Take rshankras/app-icon-generator from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.