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
3030 ? `com.t3tools.t3code.dev.${devBundleIdSuffix || "local"}`
3131 : "com.t3tools.t3code";
3232const APP_PROTOCOL_SCHEMES = isDevelopment ? ["t3code-dev"] : ["t3code"];
33const LAUNCHER_VERSION = 10;
33const LAUNCHER_VERSION = 11;
3434const defaultIconPath = join(desktopDir, "resources", "icon.icns");
3535const developmentMacIconPngPath = join(repoRoot, "assets", "dev", "blueprint-macos-1024.png");
3636
......@@ -295,7 +295,11 @@ function buildMacLauncher(electronBinaryPath) {
295295 }
296296
297297 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 });
299303 patchMainBundleInfoPlist(targetAppBundlePath, iconPath);
300304 patchHelperBundleInfoPlists(targetAppBundlePath);
301305 if (isDevelopment) {