ghCLI authenticated (gh auth status)- All changes committed and pushed to
main - All tests passing (
make test)
Edit Info.plist — update both version fields:
<key>CFBundleVersion</key>
<string>2</string> <!-- increment build number -->
<key>CFBundleShortVersionString</key>
<string>1.1.0</string> <!-- new semver -->git add Info.plist
git commit -m "Bump version to 1.1.0"
git push origin mainmake distThis creates build/Command.zip containing Command.app with the correct Info.plist.
gh release create v1.1.0 build/Command.zip \
--title "Command v1.1.0" \
--notes "$(cat <<'EOF'
## What's New
<video src="https://URL_TO_VIDEO.mp4"></video>
- Feature description
- Bug fix description
## Install
Download `Command.zip`, unzip, move to `/Applications`, launch.
If macOS says the app is damaged, run:
\`\`\`
xattr -cr /Applications/Command.app
\`\`\`
EOF
)"Release notes format:
- Start with
## What's New - If you have a demo video, add it as:
<video src="URL"></video>right after the heading- Upload the video to a GitHub issue/comment first to get a
github.com/user-attachments/assets/...URL - Or use a raw
.mp4/.movURL on its own line
- Upload the video to a GitHub issue/comment first to get a
- The app's update popover will show the video + notes when a user hovers "update available"
- End with install instructions for new users
# Check the API returns the new release
curl -s "https://api.github.com/repos/njerschow/Command/releases/latest" | python3 -c "import json,sys; d=json.load(sys.stdin); print(f'tag: {d[\"tag_name\"]}, assets: {len(d.get(\"assets\",[]))}')"Then relaunch the OLD version of Command — the footer should show "v1.1.0 available" in blue. Clicking it opens a popover with the release notes and video.
- Major (2.0.0): breaking changes or major rewrites
- Minor (1.1.0): new features
- Patch (1.0.1): bug fixes only
UpdateChecker.swiftcallsGET /repos/njerschow/Command/releases/lateston app launch and each popover open (rate-limited to 1 check/hour)- Compares remote tag version against
CFBundleShortVersionStringfrom Info.plist - If newer: shows blue "v{version} available" in footer
- Clicking opens a popover with release notes, video preview (if present), and download/GitHub links
- The
.zipasset download URL is pulled from the release'sassetsarray