app-store
App Store optimization and marketing skills for descriptions, screenshots, keywords, review responses, and comprehensive promotional strategy. Use when user…
Generates a minimum version enforcement system with hard-block and soft-prompt update flows, App Store redirect, and remote config or App Store lookup for version checks. Use when user wants force update, mandatory update, or minimum version check.
$ npx -y skills add rshankras/claude-code-apple-skills --skill force-update --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/force-updateContext preview
The summary Claude sees to decide when to auto-load this skill.
Generates a minimum version enforcement system with hard-block and soft-prompt update flows, App Store redirect, and remote config or App Store lookup for version checks. Use when user wants force update, mandatory update, or minimum version check.
name: force-update description: Generates a minimum version enforcement system with hard-block and soft-prompt update flows, App Store redirect, and remote config or App Store lookup for version checks. Use when user wants force update, mandatory update, or minimum version check. 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 minimum version check system that blocks app usage when a critical update is required, or shows a dismissible prompt for recommended updates. Checks the current app version against a remote configuration endpoint or the App Store lookup API and presents the appropriate UI.
Use this skill when the user:
Search for existing version check code:
Glob: **/*ForceUpdate*.swift, **/*VersionCheck*.swift, **/*UpdateManager*.swift, **/*AppVersion*.swift Grep: "ForceUpdate" or "minimumVersion" or "mandatoryUpdate" or "CFBundleShortVersionString"
If an existing update mechanism is found:
Search for existing networking code:
Glob: **/*API*.swift, **/*Client*.swift, **/*Network*.swift Grep: "APIClient" or "URLSession" or "NetworkService"
If a networking layer exists, generate the version checker to use it rather than raw URLSession.
Ask user via AskUserQuestion:
1. **Update check source?**
2. **Update types to support?**
3. **Check frequency?**
4. **Include skip option for soft updates?**
Read `templates.md` for production Swift code.
Generate these files: 1. `AppVersion.swift` — Semantic version model (major.minor.patch) with Comparable 2. `UpdateRequirement.swift` — Enum: none, softUpdate, hardUpdate with message and store URL 3. `VersionChecker.swift` — Protocol + implementation based on chosen source
4. `UpdateManager.swift` — @Observable manager that coordinates checks, caches timing, exposes state
5. `ForceUpdateView.swift` — Full-screen blocking view with App Store button 6. `SoftUpdateBannerView.swift` — Dismissible banner with Update and Later buttons
7. `UpdateCheckModifier.swift` — ViewModifier that auto-checks on appear and presents UI
Check project structure:
After generation, provide:
ForceUpdate/ ├── AppVersion.swift # Semantic version model with Comparable ├── UpdateRequirement.swift # none / softUpdate / hardUpdate enum ├── VersionChecker.swift # Protocol + remote/App Store implementation ├── UpdateManager.swift # @Observable coordinator ├── ForceUpdateView.swift # Full-screen blocking UI ├── SoftUpdateBannerView.swift # Dismissible banner UI └── UpdateCheckModifier.swift # ViewModifier for auto-check
**Add the modifier to your root view:**
@main
struct MyApp: App {
var body: some Scene {
WindowGroup {
ContentView()
.checkForUpdates()
}
}
}**Custom configuration:**
ContentView()
.checkForUpdates(
checker: RemoteJSONVersionChecker(
url: URL(string: "https://api.example.com/app-config")!
),
frequency: .daily
)**Manual check from a settings screen:**
struct SettingsView: View {
@Environment(UpdateManager.self) private var updateManager
var body: some View {
Section("App") {
if case .softUpdate(_, let message) = updateManager.requirement {
Button("Update Available") {
updateManager.openAppStore()
}
}
Button("Check for Updates") {
Task { await updateManager.checkNow() }
}
}
}
}@Test
func hardUpdateBlocksWhenBelowMinimum() async throws {
let checker = MockVersionChecker(
requirement: .hardUpdate(
version: AppVersion(major: 2, minor: 0, patch: 0),
message: "Critical security fix"
)
)
let manager = UpdateManager(
checker: checker,
currentVersion: AppVersion(major: 1, minor: 0, patch: 0)
)
await manager.checkNow()
guard case .hardUpdate = manager.requirement else {
Issue.record("Expected hard update requirement")
return
}
}
@TeA 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.
Repo: rshankras/claude-code-apple-skills
App Store optimization and marketing skills for descriptions, screenshots, keywords, review responses, and comprehensive promotional strategy. Use when user…
Privacy-preserving ad measurement with AdAttributionKit (SKAdNetwork's successor) — install and re-engagement attribution, conversion-value strategy under…
Generate compelling App Store descriptions that convert browsers into users. Use when writing initial descriptions, improving existing copy, or drafting…
Apple Search Ads campaign strategy for indie developers — paid acquisition, keyword bidding, budget planning, and ROAS optimization. Use when user asks about…
Take a one-time in-app purchase from MISSING_METADATA to READY_TO_SUBMIT in App Store Connect — set its price schedule and localized display name/description…
Optimize app title, subtitle, and keywords for maximum App Store discoverability. Use when launching a new app, improving search rankings, entering new…