DEV Community

misswell
misswell

Posted on

Open Source: MacPilot — a native macOS menu-bar toolbox with 11 everyday tools (Swift, zero dependencies)

I've been maintaining a native macOS menu bar app called MacPilot and finally open-sourced it: https://github.com/misswell/MacPilot

It's built with Swift 6 + SwiftUI, has zero third-party Swift dependencies, and ships as a notarized Developer ID build.

What's inside:

  • Per-app quit rules: hide / close windows / quit an app after it's been idle for N minutes. Chat and mail apps stop stealing attention automatically.
  • BLE proximity unlock: unlock your Mac when your iPhone or Apple Watch comes close, lock when it leaves. RSSI smoothing plus dual thresholds, so a flaky signal doesn't flap the lock.
  • Window switcher (⌥Tab) across apps with live thumbnails.
  • Clipboard history (⌘⇧V) with search, pinning and persistence.
  • Smooth scrolling: rewrites mouse wheel events into interpolated frames that feel like a trackpad.
  • Picture-in-Picture via ScreenCaptureKit, with real Now Playing controls.
  • Screen capture suite: element picker, OCR, scrolling screenshots, annotations.
  • Input source automation per app and website, a configurable Finder right-click menu, APFS transparent compression, and a screen recording engine (HDR, mic mixing, iOS device capture).

A few implementation notes people might find interesting:

  1. The Finder Sync extension shares data with the host app, and we learned the hard way that a NON-sandboxed app cannot write to the App Group container even with the entitlement declared — TCC denies it, and SwiftData's fatalError took the whole app down at launch. The fix probes the directory's real writability at runtime and falls back to Application Support.

  2. Swift 6 concurrency: Timer and NotificationCenter @Sendable callbacks touching @MainActor state became hard compile errors on a fresh CI build. MainActor.assumeIsolated inside callbacks that are already bound to the main queue solved it without giving up isolation.

  3. The in-app updater validates the update package's designated requirement against the running app — otherwise a notarized update can silently reset your Accessibility and Screen Recording grants.

Everything runs locally. Config is a versioned config.json, and the login password only ever lives in the Keychain.

Releases (Apple Silicon + Intel, notarized): https://github.com/misswell/MacPilot/releases/latest

Issues and PRs welcome — especially if you're also building native macOS apps and have opinions about any of the above.

Tags: swift, macos, opensource, productivity

Top comments (0)