v0.1.0-alpha.24 — unified macOS .app launcher + 12 stability fixes
Pre-release
Pre-release
·
3 commits
to main
since this release
First combined Linux x86_64 + macOS arm64 release.
Install (same one-liner both platforms):
```
curl -fsSL https://mclovin.org/install.sh | bash
```
The install script detects your platform and does the right thing — see the manual for the per-platform details.
What's new since alpha.22
macOS support graduated from "experimental" (alpha.23 test) to first-class
- Full `.app` bundle with native browser-detection, profile routing (Brave, Chrome, Arc, Chromium, Firefox), webapp mode (`mclovin --app=URL`).
- Unified .app launcher — the bundle's launcher binary IS the mclovin binary now. No Swift dependency, no `xcode-select --install` required for setup, no per-user compile step. kAEGetURL Apple Events are handled natively in Rust via objc2 / NSAppleEventManager.
- Auto-update with Gatekeeper quarantine xattr strip; the bundle (Info.plist + binary + lsregister) is refreshed in place on every update.
- Settings window centers on `visibleFrame` (no menu-bar clipping).
- macOS post-install hints localized to pt-BR / es-ES.
Linux gains too (all behavior-preserving)
- 1Hz default-browser poll gated per-screen + bumped to 5s — significantly less `xdg-mime` subprocess churn while the GUI is idle.
- `is_chromium_family` switched from substring to token-exact matching (no more false positives like `arc` hitting `monarch` / `search-archive`).
- Profile flag (`--profile-directory=X`) skipped on no-URL picker selections so the browser is just activated instead of spawning a fresh new window.
Stability fixes (post-review hardening, no user-facing surface)
Two rounds of code review (`/simplify` × 2) addressed:
- Atomic launcher install (copy-to-tmp + rename, with same-file guard so `mclovin update` from the bundle binary can't self-destruct).
- AE handler covers all 3 outcomes (URL OK, spawn fails, AE malformed) with guaranteed exit — no more launcher hangs.
- `__CFBundleIdentifier` env check replaces `isatty` heuristic for LaunchServices-vs-terminal detection (no more hangs on `nohup`, redirected stdin, cron).
- `spawn_open_url` / `spawn_picker` return `Result` and log on failure.
- `logging::init` failure non-fatal so the launcher still routes URLs on restricted filesystems.
- Post-install bundle refresh now calls full `create_bundle` + `lsregister` (Info.plist version + LaunchServices cache stay in sync) and propagates errors instead of swallowing them.
Compatibility
- macOS arm64 (Apple Silicon). Intel macs will get `mclovin-macos-x86_64` later — asset finder already supports it once CI publishes the artifact.
- Linux x86_64, identical to alpha.22 from the user's perspective (only cfg-gated macOS code added; runtime behavior preserved + the Linux-side improvements above).
- Auto-update: users on alpha.22 (Linux) and alpha.23 (macOS) can update directly via the in-app Updates screen or `mclovin update` from the CLI.