icons: per-platform icon set — real Liquid Glass on macOS, flat design on Windows/Linux
The hand-packed icns was pixel-clean (verified by unpacking and scanning every size), but macOS 26 composites legacy .icns icons into the Liquid Glass system at render time; stacked on Icon Composer's baked PNG-export lighting, that clips the rim highlights into the near-corner specks and abrupt highlight ends (owner report 2026-10-13). The fix is the real layered icon: mac.icon now points at the Icon Composer document (build/icon.icon, copied from ~/Documents/Affinity/lh-logo) and electron-builder compiles it via actool into Assets.car — macOS 26+ renders the true Liquid Glass design (dark/tinted variants included). actool's backwards-compat icns caps at 256px, so scripts/after-pack.cjs swaps in the existing full-res build/icon.icns before signing: pre-Tahoe macOS keeps today's quality, Tahoe gets the layered icon. Windows/Linux get the owner's flat design (rounded squircle with baked transparency): scripts/make-icons.mjs renders build/icon-flat.svg via resvg into build/icon.ico (16→256 PNG entries) + build/icon.png (512), and electron-builder.yml pins win.icon/linux.icon. desktop:dist injects DEVELOPER_DIR (actool needs Xcode; the machine selects CommandLineTools by default, CI's setup-xcode takes precedence via the :- default). The release workflow's mac job selects Xcode 26+ explicitly. Verified locally: mac --dir build (Assets.car + checksummed full-res fallback + CFBundleIconName/IconFile) and the win-unpacked exe carries our ico bytes; NSIS/AppImage assembly is CI's (cross-build tooling can't run on arm64 macOS). Runbook updated. 1610/1610.
This commit is contained in:
@@ -13,6 +13,19 @@ appId: com.learnharness.LearnHarness
|
||||
productName: LearnHarness
|
||||
directories:
|
||||
output: dist
|
||||
# Icons (owner ruling, 2026-10-13) — per-platform sources in build/:
|
||||
# mac build/icon.icon — the Icon Composer document (layered Liquid
|
||||
# Glass); actool (Xcode 26+) compiles Assets.car (CFBundleIconName,
|
||||
# macOS 26+ renders the true layered icon) + an actool fallback icns
|
||||
# capped at 256px, which scripts/after-pack.cjs swaps for the
|
||||
# hand-packed full-res build/icon.icns (pre-Tahoe keeps 16→1024).
|
||||
# Requires actool ≥ 26: desktop:dist injects DEVELOPER_DIR locally;
|
||||
# the release workflow's mac job runs setup-xcode.
|
||||
# win build/icon.ico — generated (16→256) from the flat design by
|
||||
# scripts/make-icons.mjs.
|
||||
# linux build/icon.png — 512×512, same script. Rounded squircle with
|
||||
# baked transparency on both (owner ruling) — Windows/Linux don't
|
||||
# mask, the shape ships in the artwork.
|
||||
files:
|
||||
# Only the shell goes into the asar. ORDER IS LOAD-BEARING (payload
|
||||
# wave, 2026-09-24): electron-builder's dependency collector packs the
|
||||
@@ -82,6 +95,7 @@ extraResources:
|
||||
filter:
|
||||
- "standalone/**/*"
|
||||
mac:
|
||||
icon: build/icon.icon
|
||||
# zip rides next to dmg (flipped 2026-10-08): Squirrel.Mac — Electron's
|
||||
# macOS auto-updater — installs from ZIP and cannot read DMGs. DMG is
|
||||
# for humans; ZIP + blockmap are the updater's payload.
|
||||
@@ -114,7 +128,9 @@ mac:
|
||||
notarize: true
|
||||
dmg:
|
||||
title: "${productName} ${version}"
|
||||
afterPack: scripts/after-pack.cjs
|
||||
win:
|
||||
icon: build/icon.ico
|
||||
target:
|
||||
- target: nsis
|
||||
arch:
|
||||
@@ -128,6 +144,7 @@ nsis:
|
||||
oneClick: true
|
||||
perMachine: false
|
||||
linux:
|
||||
icon: build/icon.png
|
||||
target:
|
||||
- target: AppImage
|
||||
arch:
|
||||
|
||||
Reference in New Issue
Block a user