From 6f33c7277aa30250f66b499a63f8ed92829cb282 Mon Sep 17 00:00:00 2001 From: Thore Cimbal Date: Thu, 6 Aug 2026 12:00:00 +0000 Subject: [PATCH] desktop: macOS baut ohne volles Xcode (BUILD-01, management#22) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Upstream setzt mac.icon auf build/icon.icon - das Icon-Composer-Bundle von macOS 26. Dessen Verarbeitung ruft actool auf, das es nur mit dem vollen Xcode gibt (~10 GB, App-Store-Login). Mit blossen CommandLineTools scheitert damit JEDER macOS-Build: ⨯ Failed to check actool version. Is Xcode 26 or higher installed? Die bisherige Diagnose in management#22 war falsch: Dort stand, nur das DMG-Target brauche actool und das ZIP baue problemlos. Tatsaechlich trifft es alle macOS-Targets, weil mac.icon fuer alle gilt - das ZIP scheitert genauso. Der dort empfohlene Ausweg (DMG per hdiutil bauen) haette ein Problem geloest, das gar nicht am DMG lag. Loesung: mac.icon und dmg.badgeIcon auf das klassische build/icon.icns. Damit baut electron-builder ZIP UND DMG selbst, inklusive Blockmap - verifiziert am 2026-08-06, beide Artefakte in Release v0.4.1. Umgesetzt als Variantenoption statt als Aenderung an Upstreams Defaults: Die Werte stehen in unserem axion1337/build.json, electron-builder.ts wird nur additiv um zwei optionale Schluessel erweitert - dieselbe Machart wie das bereits vorhandene linux.deb.name. Ein Upstream-Merge erzeugt an der mac.icon-Zeile damit keinen Konflikt. Preis: kein macOS-26-Icon-Rendering. Ohne Xcode gaebe es ohnehin keinen Build. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01PKhFj1S3UdD6xL2fbWPeYj --- apps/desktop/axion1337/build.json | 4 +++- apps/desktop/electron-builder.ts | 27 +++++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/apps/desktop/axion1337/build.json b/apps/desktop/axion1337/build.json index 3b78713a9..63426d1aa 100644 --- a/apps/desktop/axion1337/build.json +++ b/apps/desktop/axion1337/build.json @@ -3,5 +3,7 @@ "name": "threadnet-desktop", "productName": "ThreadNet", "description": "ThreadNet — powered by Element", - "protocols": ["io.element.desktop", "element"] + "protocols": ["io.element.desktop", "element"], + "mac.icon": "build/icon.icns", + "dmg.badgeIcon": "build/icon.icns" } diff --git a/apps/desktop/electron-builder.ts b/apps/desktop/electron-builder.ts index 9bcd771a7..08b5cef03 100644 --- a/apps/desktop/electron-builder.ts +++ b/apps/desktop/electron-builder.ts @@ -48,6 +48,8 @@ interface Variant extends Metadata { "appId": string; "linux.executableName"?: string; "linux.deb.name"?: string; + "mac.icon"?: string; + "dmg.badgeIcon"?: string; "protocols": string[]; } @@ -202,6 +204,31 @@ if (variant["linux.deb.name"]) { config.deb.fpm.push("--name", variant["linux.deb.name"]); } +/** + * ThreadNet-Fork: Icon-Pfade fuer macOS ueberschreibbar machen. + * + * Upstream setzt `mac.icon` auf das Icon-Composer-Bundle `build/icon.icon` + * (macOS 26). Dessen Verarbeitung ruft `actool` auf, das es nur mit dem vollen + * Xcode gibt (~10 GB, App-Store-Login) - mit blossen CommandLineTools scheitert + * damit JEDER macOS-Build, nicht nur das DMG: + * + * ⨯ Failed to check actool version. Is Xcode 26 or higher installed? + * + * Ueber die Variante laesst sich stattdessen das klassische `.icns` waehlen. + * Bewusst hier als Variantenoption statt als Aenderung an den Defaults oben: + * So bleibt Upstreams Wert unberuehrt und ein Upstream-Merge erzeugt keinen + * Konflikt an dieser Zeile. + * + * Preis: kein macOS-26-Icon-Rendering. Ohne Xcode gaebe es ohnehin keinen Build. + */ +if (variant["mac.icon"]) { + config.mac.icon = variant["mac.icon"]; +} + +if (variant["dmg.badgeIcon"]) { + config.dmg.badgeIcon = variant["dmg.badgeIcon"]; +} + /** * Allow specifying windows signing cert via env vars * @param {string} process.env.ED_SIGNTOOL_SUBJECT_NAME