Cutting a release¶
Loom's release script is bin/release.sh. It bumps nothing for you — bump MARKETING_VERSION in project.yml first, commit, then run the script.
Prereqs¶
xcodegenandxcodebuild(Xcode CLI tools).hdiutil(built-in).ghCLI authenticated (gh auth login -h github.com).- A clean working tree at the commit you want to tag.
The flow¶
# 1. Bump MARKETING_VERSION (and CURRENT_PROJECT_VERSION) in project.yml.
# 2. Commit + push.
bin/release.sh # run from the repo root
What the script does:
- Reads version —
MARKETING_VERSIONandCURRENT_PROJECT_VERSIONfromproject.yml. - Pre-flight — verifies
ghis authed (viagh api user, notgh auth statuswhich trips on stale background accounts), the local tag doesn't already exist, and the GitHub release doesn't already exist. - Regenerates the Xcode project —
xcodegen generate. - Builds Release —
xcodebuild -project Loom.xcodeproj -scheme Loom -configuration Release build. - Locates the built
.app— searches~/Library/Developer/Xcode/DerivedData/.../Build/Products/Release/Loom.app. - Packages the DMG — copies
Loom.appand an/Applicationsalias into a staging temp dir, runshdiutil create -format UDZO, names the fileLoom-<version>.dmg. - Tags and pushes —
git tag -a vX.Y.Z -m "Loom <version> (<build>)",git push origin vX.Y.Z. - Creates the GitHub release —
gh release create vX.Y.Z <dmg> -t "Loom <version>" -F notes.md.
The release notes are boilerplate (install steps + auto-update note). If you want a real changelog, edit the heredoc in bin/release.sh or let gh release edit rewrite it after.
Post-release¶
Every running Loom on every machine picks the new build up via the auto-update path within 60 seconds.
What can go wrong¶
error: tag vX.Y.Z already exists locally— you forgot to bumpMARKETING_VERSION. Bump it, commit, retry.error: built Release/Loom.app not found under DerivedData—xcodebuildfailed silently. Re-run with-quietremoved from the script to see the actual compile errors.gh release create422 — the release already exists on GitHub. Bump version, retry.
Why ad-hoc signing?¶
Loom is a personal tool with no Apple Developer Program enrollment. Ad-hoc signing (CODE_SIGN_IDENTITY: "-") is enough for local distribution; users do the right-click → Open dance once and macOS remembers.
If you ever do enroll, change DEVELOPMENT_TEAM and CODE_SIGN_IDENTITY in project.yml. The DMG flow doesn't change.