Files
craft-launcher/Cargo.toml
T
BFlatandClaude Opus 5.5 c1a9b36f82 macOS: open disk images reliably, and say why when they won't open; 0.2.1 (#135)
* macOS: open disk images reliably, and say why when they won't open

Installing or updating an app on macOS could fail with only "couldn't open
the disk image". hdiutil's own reason was thrown away, and every install of
an app mounted its image at the same folder, which an attach that was
interrupted or timed out could still be holding.

- Each install mounts its image at a new, empty folder.
- The attach skips hdiutil's checksum pass (-noverify): the download's
  SHA-256 is already checked against the release, and on a large image that
  pass alone could run past the time limit, now 5 minutes.
- When the image still won't open, or the app won't copy, the message says
  why in hdiutil's or ditto's words ("couldn't open the disk image:
  Resource temporarily unavailable").
- hdiutil, ditto and codesign are run by full path: a launcher started from
  Finder or at login gets a minimal PATH.

process::run is capture's sibling that returns the helper's error message;
capture is now built on it. The launcher's own macOS self-update installs
through the same code, so it gets all of this too.

Co-Authored-By: Claude Opus 5.5 <[email protected]>

* Release 0.2.1

Co-Authored-By: Claude Opus 5.5 <[email protected]>

---------

Co-authored-by: Claude Opus 5.5 <[email protected]>
2026-10-11 19:51:54 +07:00

47 lines
1021 B
TOML

[workspace]
resolver = "3"
members = ["crates/*", "apps/*", "xtask"]
[workspace.package]
version = "0.2.1"
edition = "2024"
license = "MIT OR Apache-2.0"
rust-version = "1.90"
repository = "https://github.com/storytold/craft-launcher"
[workspace.lints.rust]
unsafe_code = "forbid"
[workspace.lints.clippy]
dbg_macro = "warn"
todo = "warn"
[workspace.dependencies]
artcraft-launcher-core = { path = "crates/core" }
artcraft-launcher-ui-egui = { path = "crates/ui-egui" }
artcraft-launcher-native = { path = "crates/native" }
egui = "0.36"
eframe = { version = "0.36", default-features = false }
egui_extras = { version = "0.36", default-features = false }
egui_kittest = "0.36"
serde = { version = "1", features = ["derive"] }
serde_json = "1"
semver = { version = "1", features = ["serde"] }
log = "0.4"
[profile.dev.package."*"]
opt-level = 2
[profile.dev]
opt-level = 1
[profile.release]
lto = "thin"
codegen-units = 1
[profile.wasm-release]
inherits = "release"
opt-level = "s"
lto = "fat"
strip = "debuginfo"