macOS DMG: generate DS_Store and TIFF from a script, attribute the assets (review of #493)

- packaging/macos/dmg/generate.py writes background.tiff and DS_Store on any OS (resvg with
  the repo's fonts; ds_store and mac_alias, as dmgbuild uses). Both are byte-reproducible and
  carry nothing from the machine that made them.
- DS_Store: same window, icon size, positions and background alias as before, without the
  bookmark (pBBk/pBB0) and the alias's disk-image record, which held the author's boot volume
  UUID and name, its creation date and temporary paths.
- background.tiff: the same pixels as before (checked), now opaque RGB with Deflate (1.8 MB to
  1.0 MB) and LittleCMS's built-in sRGB profile instead of an HP profile with no open licence;
  no file names or software tags.
- background.svg: drop an unused pattern and the xlink namespace (renders the same).
- ASSETS.md rows for the three files; README, docs/releasing.md (volume name) and ROADMAP.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
bflatastic
2026-10-08 20:36:43 +07:00
co-authored by Claude Opus 5.5
parent 884df22408
commit d0a99faf1e
6 changed files with 158 additions and 28 deletions
+3 -1
View File
@@ -80,7 +80,9 @@ The rules are in craftrules `standards/fonts.md`, the build option in
- **Notarization:** the app is zipped and sent with `xcrun notarytool submit --wait`, then the
ticket is stapled and checked with `stapler validate` and `spctl`. The app goes on a DMG
(`hdiutil makehybrid` and `convert`, with an `Applications` link to drag onto), which is signed,
notarized and stapled too.
notarized and stapled too. Its Finder window (background, icon size and positions) comes from
[`packaging/macos/dmg/`](../packaging/macos/dmg/README.md), and its volume is named `VectorCraft`
without the version, which the window's background needs; the DMG file name keeps the version.
- **CLI:** the universal `vectorcraft-cli` is signed the same way, zipped, and the zip is
notarized. A bare executable can't hold a stapled ticket, so Gatekeeper looks the CLI's ticket up
online the first time a downloaded copy runs.