Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,11 @@ English, and it ships with a light and a dark theme.

## Install

DevBox runs on **Windows and Linux**. There is no macOS build: it cannot be tested here,
and Gatekeeper wants a paid Apple Developer account with no free way around it on recent
versions — shipping for a platform that can be neither tested nor distributed would be a
promise nobody can keep.

Download from the [latest release](https://github.com/vmillet-dev/devbox-rs/releases/latest).

**Windows**
Expand Down
9 changes: 9 additions & 0 deletions docs/architecture.md
Original file line number Diff line number Diff line change
Expand Up @@ -1936,6 +1936,15 @@ update.
One button: **Actions → Release → Run workflow**, with a `dry_run` checkbox. `release.yml`
carries the whole path — `prepare`, `release-build`, `publish` — and `ci.yml` is only CI.

**Two platforms, deliberately: Windows and Linux.** The release matrix builds
`windows-latest` and `ubuntu-22.04`, the CI matrix tests the same two, and that is the whole
list. macOS is out of scope and stays out: nothing here can test it, and Gatekeeper wants a
paid Apple Developer account with no free bypass on recent versions — a build that can be
neither tested nor distributed is a liability wearing the costume of a feature. The bundle
therefore declares no `.icns`, and the README says which platforms it ships. ⚠️ One macOS
name survives and is meant to: `tauri_plugin_autostart::init` takes a `MacosLauncher` on
every platform and ignores it off macOS, so it is a required argument, not a dead branch.

Two facts shape that, and neither is negotiable:

- **`CHANGELOG.md` is baked in at compile time.** `include_str!` reads it when the crate is
Expand Down
Binary file removed src-tauri/icons/icon.icns
Binary file not shown.
4 changes: 4 additions & 0 deletions src-tauri/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -186,6 +186,10 @@ fn setup(app: &tauri::App) -> Result<(), Box<dyn std::error::Error>> {

// "Start with Windows". No launch argument: DevBox started by the system opens as
// if started by hand.
//
// ⚠️ `MacosLauncher` is not macOS code that slipped in — DevBox ships for Windows and
// Linux only. The plugin takes it on every platform and ignores it off macOS, so it is
// a required argument rather than a dead branch, and deleting it would not compile.
app.handle().plugin(tauri_plugin_autostart::init(
tauri_plugin_autostart::MacosLauncher::LaunchAgent,
None,
Expand Down
8 changes: 1 addition & 7 deletions src-tauri/tauri.conf.json
Original file line number Diff line number Diff line change
Expand Up @@ -29,13 +29,7 @@
"active": true,
"targets": "all",
"createUpdaterArtifacts": true,
"icon": [
"icons/32x32.png",
"icons/128x128.png",
"icons/128x128@2x.png",
"icons/icon.icns",
"icons/icon.ico"
],
"icon": ["icons/32x32.png", "icons/128x128.png", "icons/128x128@2x.png", "icons/icon.ico"],
"windows": {
"nsis": {
"installMode": "currentUser"
Expand Down
4 changes: 2 additions & 2 deletions src/app/core/services/autostart/autostart.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -47,8 +47,8 @@ export class AutostartService {

private async push(enabled: boolean): Promise<void> {
try {
// Read back first: `enable()` would rewrite the system entry on every
// start, and on macOS a re-registered agent loses its state.
// Read back first: `enable()` would rewrite the system entry on every start,
// for a value the system already holds.
if ((await this.adapter.isEnabled()) === enabled) return;

await (enabled ? this.adapter.enable() : this.adapter.disable());
Expand Down