2026-07-07 04:30:06 +00:00
|
|
|
# Releasing BrewBar
|
|
|
|
|
|
|
|
|
|
## Version scheme
|
|
|
|
|
|
|
|
|
|
Semantic versioning, two or three numbers:
|
|
|
|
|
|
|
|
|
|
- **1.1, 1.2, …** — new features (settings, new menu items, …)
|
|
|
|
|
- **1.0.1, 1.0.2, …** — bug fixes only
|
|
|
|
|
- **2.0** — reserved for something that changes how the app fundamentally works
|
|
|
|
|
|
|
|
|
|
The version lives in `MARKETING_VERSION` in the Xcode project. Change it in
|
|
|
|
|
Xcode: target **BrewBar → General → Version** (this updates Debug and Release
|
|
|
|
|
together). The git tag and zip filename must match it exactly: version `1.1`
|
|
|
|
|
→ tag `v1.1` → `BrewBar-1.1.zip`.
|
|
|
|
|
|
|
|
|
|
## Release checklist
|
|
|
|
|
|
|
|
|
|
1. **Finish and merge the work.** Tests green, app manually verified:
|
|
|
|
|
```
|
|
|
|
|
xcodebuild -project BrewBar.xcodeproj -scheme BrewBar -configuration Debug -destination "platform=macOS" test
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
2. **Bump the version** in Xcode (see above), commit.
|
|
|
|
|
|
|
|
|
|
3. **Build and package** (from the project root):
|
|
|
|
|
```
|
|
|
|
|
xcodebuild -project BrewBar.xcodeproj -scheme BrewBar -configuration Release -destination "platform=macOS" build SYMROOT=build
|
|
|
|
|
ditto -c -k --sequesterRsrc --keepParent build/Release/BrewBar.app dist/BrewBar-<VERSION>.zip
|
|
|
|
|
shasum -a 256 dist/BrewBar-<VERSION>.zip
|
|
|
|
|
```
|
|
|
|
|
`ditto` (not `zip`) — it preserves code signatures and Finder metadata.
|
|
|
|
|
|
|
|
|
|
4. **Update the cask** `Casks/brewbar.rb`: set `version` and paste the new
|
|
|
|
|
`sha256`. Brew refuses any download whose hash doesn't match this value.
|
|
|
|
|
|
|
|
|
|
5. **Commit and push**:
|
|
|
|
|
```
|
|
|
|
|
git add Casks/brewbar.rb BrewBar.xcodeproj/project.pbxproj
|
|
|
|
|
git commit -m "release <VERSION>"
|
|
|
|
|
git push
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
6. **Create the Forgejo release**: repo → Releases → New Release.
|
|
|
|
|
- Tag: `v<VERSION>` (must match the cask URL), target `main`
|
|
|
|
|
- Attach `dist/BrewBar-<VERSION>.zip`
|
|
|
|
|
- Title: `BrewBar <VERSION>`; description: what changed since last release
|
|
|
|
|
|
|
|
|
|
7. **Upgrade on any machine**:
|
|
|
|
|
```
|
|
|
|
|
brew update && brew upgrade --cask brewbar
|
|
|
|
|
```
|
|
|
|
|
(`brew update` pulls the tap, sees the new cask version, `upgrade` fetches
|
|
|
|
|
the release zip.)
|
|
|
|
|
|
|
|
|
|
## Notes
|
|
|
|
|
|
|
|
|
|
- The app is signed with an Apple *Development* certificate, not notarized.
|
2026-07-07 04:38:10 +00:00
|
|
|
Recent Homebrew removed the `--no-quarantine` option, so on any Mac that
|
|
|
|
|
did not build the app, clear the quarantine flag after install/upgrade
|
|
|
|
|
(the cask prints this reminder as a caveat):
|
|
|
|
|
```
|
|
|
|
|
xattr -dr com.apple.quarantine /Applications/BrewBar.app
|
|
|
|
|
```
|
2026-07-07 04:30:06 +00:00
|
|
|
- `dist/` and `build/` are gitignored — release zips live only in Forgejo
|
|
|
|
|
releases, never in git.
|
|
|
|
|
- First install on a new machine:
|
|
|
|
|
```
|
|
|
|
|
brew tap maxsoch/brewbar https://forgejo.socheleau.fr/maxsoch/BrewBar.git
|
2026-07-07 04:38:10 +00:00
|
|
|
brew install --cask maxsoch/brewbar/brewbar
|
|
|
|
|
xattr -dr com.apple.quarantine /Applications/BrewBar.app
|
2026-07-07 04:30:06 +00:00
|
|
|
```
|