app-store
App Store optimization and marketing skills for descriptions, screenshots, keywords, review responses, and comprehensive…
Generates a "What's New" / changelog screen shown after app updates with version tracking, feature highlights, and one-time display per version. Use when user wants release notes UI, update notifications, or feature announcements.
Claude Code
$ npx -y skills add rshankras/claude-code-apple-skills --skill whats-new --agent claude-code
Codex
$ npx skills add rshankras/claude-code-apple-skills --skill whats-new -a codex -y
Cursor
$ npx skills add rshankras/claude-code-apple-skills --skill whats-new -a cursor -y
Gemini CLI
$ npx skills add rshankras/claude-code-apple-skills --skill whats-new -a gemini-cli -y
GitHub Copilot
$ npx skills add rshankras/claude-code-apple-skills --skill whats-new -a github-copilot -y
OpenCode
$ npx skills add rshankras/claude-code-apple-skills --skill whats-new -a opencode -y
Windsurf
$ npx skills add rshankras/claude-code-apple-skills --skill whats-new -a windsurf -y
name: whats-new description: Generates a "What's New" / changelog screen shown after app updates with version tracking, feature highlights, and one-time display per version. Use when user wants release notes UI, update notifications, or feature announcements. allowed-tools: [Read, Write, Edit, Glob, Grep, Bash, AskUserQuestion] last_verified: 2026-07-16 review_by: 2027-06-22 os_version: iOS 27 / macOS 27
Generate a complete "What's New" screen that displays after app updates — highlights new features, changes, and improvements with version tracking to ensure it only shows once per update.
Use this skill when the user:
Search for existing what's new or changelog implementations:
Glob: **/*WhatsNew*.swift, **/*Changelog*.swift, **/*ReleaseNotes*.swift, **/*VersionTracker*.swift Grep: "WhatsNew" or "whatsNew" or "lastShownVersion" or "changelog"
If found, ask user:
Detect how the app reads its version:
Grep: "CFBundleShortVersionString" or "Bundle.main.infoDictionary" or "appVersion"
Use whichever pattern the project already employs. If none found, default to `Bundle.main.infoDictionary?["CFBundleShortVersionString"]`.
Ask user via AskUserQuestion:
1. **Presentation style?**
2. **Content source?**
3. **Dismiss behavior?**
4. **Page indicators?**
Read `templates.md` for production Swift code.
Generate these files: 1. `WhatsNewFeature.swift` — Model for a single feature (title, description, SF Symbol, tint color) 2. `WhatsNewRelease.swift` — Groups features by version string with date 3. `VersionTracker.swift` — Tracks last-shown version in UserDefaults, compares against current bundle version 4. `WhatsNewProvider.swift` — Protocol + local implementation (optional remote)
5. `WhatsNewView.swift` — Paged view with TabView(.page) showing features 6. `WhatsNewSheet.swift` — Wrapper that auto-presents via `.sheet(item:)` when new version detected
Based on configuration:
Check project structure:
After generation, provide:
WhatsNew/ ├── WhatsNewFeature.swift # Single feature model ├── WhatsNewRelease.swift # Version-grouped features ├── VersionTracker.swift # Version persistence & comparison ├── WhatsNewProvider.swift # Content provider protocol + local impl ├── WhatsNewView.swift # Paged feature display ├── WhatsNewSheet.swift # Auto-presenting sheet wrapper └── RemoteWhatsNewProvider.swift # Remote content (optional)
**Option 1: View Modifier Style (Recommended)**
@main
struct MyApp: App {
var body: some Scene {
WindowGroup {
ContentView()
.whatsNewSheet() // Automatically shows after updates
}
}
}**Option 2: Manual Control in Root View**
@main
struct MyApp: App {
@State private var whatsNewRelease: WhatsNewRelease?
var body: some Scene {
WindowGroup {
ContentView()
.sheet(item: $whatsNewRelease) { release in
WhatsNewView(release: release)
}
.task {
let tracker = VersionTracker()
if tracker.shouldShowWhatsNew() {
whatsNewRelease = WhatsNewProvider.local.latestRelease()
}
}
}
}
}**Option 3: Inline Embedding**
struct HomeView: View {
@State private var tracker = VersionTracker()
var body: some View {
VStack {
if tracker.shouldShowWhatsNew(),
let release = WhatsNewProvider.local.latestRelease() {
WhatsNewView(release: release) {
tracker.markVersionAsShown()
}
}
// Rest of home content...
}
}
}// In LocalWhatsNewProvider.swift — add a new entry per release
static let releases: [WhatsNewRelease] = [
WhatsNewRelease(
version: "2.1.0",
date: Date(timeIntervalSince1970: 1_700_000_000),
features: [
WhatsNewFeature(
title: "Dark Mode Support",A collection of Claude Code skills for iOS, macOS, watchOS, visionOS, and Apple platform development. These skills help you plan and build apps, maintain code quality, ensure HIG compliance, and guide you from idea to App Store.
App Store optimization and marketing skills for descriptions, screenshots, keywords, review responses, and comprehensive…
Privacy-preserving ad measurement with AdAttributionKit (SKAdNetwork's successor) — install and re-engagement attribution,…
Generate compelling App Store descriptions that convert browsers into users. Use when writing initial descriptions, improving…
Apple Search Ads campaign strategy for indie developers — paid acquisition, keyword bidding, budget planning, and ROAS…
Take a one-time in-app purchase from MISSING_METADATA to READY_TO_SUBMIT in App Store Connect — set its price schedule and…
Optimize app title, subtitle, and keywords for maximum App Store discoverability. Use when launching a new app, improving search…
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…
Ask which skill or flow fits your situation. A router over the skills in this repo.