Maintainer runbook
June 11, 2026 ยท View on GitHub
Build, verify, and release Hidden Bar. Assumes current Xcode on macOS 13+.
Build
# CI-style build, no signing required
xcodebuild -project 'Hidden Bar.xcodeproj' -scheme 'Hidden Bar' \
-configuration Debug CODE_SIGNING_ALLOWED=NO build
# runnable local build (uses your Apple Development identity)
xcodebuild -project 'Hidden Bar.xcodeproj' -scheme 'Hidden Bar' \
-configuration Debug build
Both must exit 0 with no MACOSX_DEPLOYMENT_TARGET override; the floor is
13.0 in the project file. The single expected warning is the deliberately
deprecated SMLoginItemSetEnabled(false) call that cleans up legacy installs.
Behavioral verification (no test target exists; this is the methodology)
The repo has no unit-test infrastructure; behavior is verified against the real menu bar. Two building blocks make that scriptable:
- Truth signal: the separator's AX size.
osascript -e 'tell application "System Events" to tell process "Hidden Bar" to get size of menu bar item 2 of menu bar 2'reads ~20pt expanded vs ~2x-screen-width collapsed. Item 1 is the arrow. - Real clicks, not AXPress:
AXPresson the arrow is a no-op because the action handler readsNSApp.currentEvent(nil under assistive synthesis; known accessibility defect). Post realCGEventmouse clicks at the arrow's AX-reported coordinates instead.
Standard checks before any release:
- expand/collapse toggle flips the separator size both ways;
- with
numberOfSecondForAutoHideset to 3, an expanded bar survives 2x the window while the pointer is parked in the menubar band, collapses within the window once the pointer leaves, and collapses normally if the pointer never entered; hoverToExpandoff: no monitor log line, hover does nothing; on: dwell expands (synthesize amouseMovedstream: cursor warping alone fires no events);- autostart pref on ->
AutoStart: SMAppService.mainApp.status = 1on stderr; off ->= 0(run the binary directly to capture stderr); - localization tables stay parseable:
plutil -lint hidden/*.lproj/*.strings.
When testing on a machine that runs Hidden Bar daily: export the prefs domain
first (defaults export com.dwarvesv.minimalbar backup.plist), quit the
installed app, test the dev build, then re-import and relaunch.
Release
- Verify the stack: every PR reviewed, builds green, behavioral checks above run.
- Bump
MARKETING_VERSION(both Hidden Bar configurations) andCURRENT_PROJECT_VERSIONin the project file. - Archive + notarize (Developer ID), staple, zip, GitHub release with notes listing closed issues.
- App Store (separate lane): the MAS listing has lagged GitHub since v1.8 (issues #281/#202); decide deliberately whether a release goes there too.
- Homebrew cask (
brew install --cask hiddenbar) follows the GitHub release artifact; notarization matters (issue #219). - Before any public release after the SMAppService migration: one upgrade-path run from a launcher-era build (v1.9 or older) verifying System Settings shows no ghost LauncherApplication login item.
Stacked-PR hygiene
Feature stacks land as chained PRs (develop <- A <- B). Merge the base PR
first, then retarget the next PR's base to develop BEFORE merging it;
deleting a merged branch auto-closes dependents otherwise.
Issue triage map
The live clusters and their code areas are documented at the end of
ARCHITECTURE.md: notch, macOS 27
mechanism break, and pointer-vs-open-menu limits. Memory reports (#361 et al.)
have so far not reproduced as leaks (constraint-leak fix landed; leaks clean
over toggle stress); re-check with a 24h+ uptime footprint sample before
chasing further.