ios-release

A command for preparing and running an iOS software release as a patch, minor, or major version.

In plain words
What is it for?
Use it to find changes since the last iOS Git tag, check related package changes, and create an internal changelog plus App Store “What’s New” notes.
Why use it?
It gathers relevant code changes and separates technical release notes from user-facing App Store text, reducing manual release preparation.

Command for Claude Code

Install

Getting it into your agent

One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.

agentmods
npx agentmods add commands/nimbalyst/nimbalyst/ios-release
Clone the repo
git clone --depth 1 https://github.com/nimbalyst/nimbalyst

Made for: Claude Code.

Per session 14 Only the description is in the session, so the agent can decide to use it. The body loads when it is invoked.
When invoked 913 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. Scan, not verified.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5 $0.00014 $0.00913
Opus 5 $0.00007 $0.00456
Sonnet 5 $0.00003 $0.00183
Haiku 4.5 $0.00001 $0.00091

Measured today against content hash 3a970de5ef80, method: parsed. Prices are Anthropic first-party input rates as of 2026-08-30, from the pricing page.

Security

Grade A, and why

ios-release scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured today.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Nothing flagged

None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.

.claude/commands/ios-release.md · 89 lines

What it actually says

Arguments: {{arg1}}

  • First word: release type (patch, minor, major)

Prepare an iOS release following this workflow:

iOS RELEASE WORKFLOW

  1. Get commits since last iOS release:
  • Find the last iOS git tag: git tag --list 'ios/*' --sort=-v:refname | head -1
  • If no iOS tags exist, note this is the first tracked iOS release and use a reasonable cutoff (e.g., last 30 commits touching iOS paths)
  • Get commits since that tag touching iOS-relevant paths:
    git log [last-ios-tag]..HEAD --oneline -- packages/ios/ packages/runtime/
    
  • Also check for root-level changes that affect iOS (package.json dependency changes, etc.)
  1. Generate release notes:
  • Create TWO versions of release notes:

A. Developer Changelog (for IOS_CHANGELOG.md):

  • Include all meaningful iOS changes (features, fixes, improvements, refactors)
  • Can include internal changes (Swift refactoring, build config, dependency updates)
  • Technical language is fine
  • Categorize using: Added, Changed, Fixed, Removed

B. App Store "What's New" text:

  • ONLY user-facing changes that affect the iOS app experience
  • Write in marketing/user-friendly language
  • Each bullet should answer "what can I now do?" or "what problem is fixed?"
  • Filter out ALL internal details:
    • NO code quality changes (Swift refactoring, type improvements)
    • NO internal architecture changes
    • NO performance optimizations unless user-perceptible
    • NO developer tooling changes
  • Keep it concise -- App Store allows ~4000 chars but shorter is better
  • Use present tense
  • No category headers -- just a clean bulleted list
  1. Update IOS_CHANGELOG.md:
  • Add DEVELOPER CHANGELOG notes to the [Unreleased] section in IOS_CHANGELOG.md (repository root)
  • Use the standard format with ### headings for each category
  • Only include categories that have changes
  1. Show BOTH versions to user:
  • Display the developer changelog (what will go in IOS_CHANGELOG.md)
  • Display the App Store "What's New" text separately
  • Show the current iOS version and what it will be bumped to
  • Ask for approval before proceeding
  1. Execute iOS release (after user approval):
  • Run ./scripts/ios-release.sh [type]
  • The script will:
    • Bump version in Info.plist (CFBundleShortVersionString)
    • Increment build number in Info.plist (CFBundleVersion)
    • Move [Unreleased] notes to a new versioned section in IOS_CHANGELOG.md
    • Create commit with release notes
    • Create annotated git tag ios/v[VERSION] with release notes
  1. Show next steps:
  • Push main and tag: git push origin main && git push origin ios/v[VERSION]
  • Open Xcode, select the NimbalystApp scheme
  • Product > Archive
  • Verify the archive embeds PlugIns/NimbalystWidgets.appex — without it there is no Live Activity, and the build still uploads cleanly
  • Upload to App Store Connect
  • Copy the App Store "What's New" text into the version description

The first archive after the widget extension was added will prompt to create an App ID for com.nimbalyst.app.widgets; accept it. The release script keeps the widget's Info.plist version in step with the app's, which App Store Connect requires.

  1. Done: Show the App Store "What's New" text for easy copy-paste into App Store Connect.

Valid release types: patch, minor, major

Example IOS_CHANGELOG.md format:

## [Unreleased]

### Added
- Hierarchical session navigation with worktree sync

### Fixed
- Fixed transcript blank screen on session load

## [1.0.1] - 2026-03-01
...
Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. today Changed · +3 lines 3a970de5ef80
  2. 2d ago First seen · 86 lines · 14 tokens per session scan A 85251d99e7f7

Subscribe to this mod's changes

ios-release is a command published in the GitHub repository nimbalyst/nimbalyst (1,627 stars, last pushed today), licensed MIT. It adds 14 tokens to every session and 913 once invoked, about $0.0001 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.