authorgravatar for 10465470+TheIcarusWings@users.noreply.github.comIcarus Wings <10465470+TheIcarusWings@users.noreply.github.com> 2026-06-14 19:52:22+01:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2026-06-14 18:52:22+00:00
loga23b83314ec82dca5976a412e60e27f154ea0451
tree89aeab6dabeca39b5f507a4d83fb9995b6119989
parentce905637099a8e9c8b2b9a0b651ca9b33debee24
signature Signed by PGP key B5690EEEBB952194

fix(desktop): mac start:desktop crash from rewritten framework symlinks (#3058)


1 files changed, 6 insertions(+), 2 deletions(-)

apps/desktop/scripts/electron-launcher.mjs+6-2
...@@ -30,7 +30,7 @@ export const APP_BUNDLE_ID = isDevelopment...@@ -30,7 +30,7 @@ export const APP_BUNDLE_ID = isDevelopment
30 ? `com.t3tools.t3code.dev.${devBundleIdSuffix || "local"}`30 ? `com.t3tools.t3code.dev.${devBundleIdSuffix || "local"}`
31 : "com.t3tools.t3code";31 : "com.t3tools.t3code";
32const APP_PROTOCOL_SCHEMES = isDevelopment ? ["t3code-dev"] : ["t3code"];32const APP_PROTOCOL_SCHEMES = isDevelopment ? ["t3code-dev"] : ["t3code"];
33const LAUNCHER_VERSION = 10;33const LAUNCHER_VERSION = 11;
34const defaultIconPath = join(desktopDir, "resources", "icon.icns");34const defaultIconPath = join(desktopDir, "resources", "icon.icns");
35const developmentMacIconPngPath = join(repoRoot, "assets", "dev", "blueprint-macos-1024.png");35const developmentMacIconPngPath = join(repoRoot, "assets", "dev", "blueprint-macos-1024.png");
3636
...@@ -295,7 +295,11 @@ function buildMacLauncher(electronBinaryPath) {...@@ -295,7 +295,11 @@ function buildMacLauncher(electronBinaryPath) {
295 }295 }
296296
297 rmSync(targetAppBundlePath, { recursive: true, force: true });297 rmSync(targetAppBundlePath, { recursive: true, force: true });
298 cpSync(sourceAppBundlePath, targetAppBundlePath, { recursive: true });298 // verbatimSymlinks keeps the framework's relative symlinks intact
299 // (e.g. Resources -> Versions/Current/Resources). Without it cpSync
300 // rewrites them to absolute paths into node_modules, which escape the
301 // bundle and crash sandboxed helper processes (icudtl.dat not found).
302 cpSync(sourceAppBundlePath, targetAppBundlePath, { recursive: true, verbatimSymlinks: true });
299 patchMainBundleInfoPlist(targetAppBundlePath, iconPath);303 patchMainBundleInfoPlist(targetAppBundlePath, iconPath);
300 patchHelperBundleInfoPlists(targetAppBundlePath);304 patchHelperBundleInfoPlists(targetAppBundlePath);
301 if (isDevelopment) {305 if (isDevelopment) {