# Phantty v0.34.1

> ⚠️ **macOS 平台仍不稳定，请谨慎使用。** 本次 fix release 修复了 v0.34.0
> 在 macOS 上的若干崩溃与签名问题以及 Windows 构建被破坏的问题，但
> macOS 的 AppKit / Metal / 多窗口路径仍处于早期阶段，仍可能在未覆盖的
> 场景下崩溃。如果你需要日常稳定使用，请暂时优先使用 Linux 或 Windows
> 版本。

## Fixed

- **Windows release build (regression from v0.34.0).** `rerootCwdFromBundleRootIfNeeded`
  无条件调用了 `std.posix.getenv`，而该 API 在 Windows 上是
  `@compileError`（Windows env 为 WTF-16），导致 v0.34.0 的 Windows
  release workflow 编译失败。该函数本就只是 macOS 的 `.app` 启动场景
  专用，整体用 comptime `builtin.os.tag == .macos` 包住后 Windows /
  Linux 上完全跳过该路径。
- **macOS: 第二个窗口崩溃 (Ctrl+Shift+N)。** `NSWindow` /
  `NSApplication` 的构造是 main-thread only；macOS 26 会从
  `-[NSWindow _initContent:...]` 抛 `NSInternalInconsistencyException`
  最终触发 abort()。`App.requestNewWindow` 会在 worker 线程上调用
  `phantty_macos_window_create`，于是从第二个窗口起必然崩溃。改为在
  worker 上时用 `dispatch_sync(dispatch_get_main_queue(), ...)` 派回
  主线程，主线程上则就地执行避免 self-deadlock。
- **macOS: 内层 `.app` 未 staple notarization ticket。** 之前的发布顺序
  先把 `.app` 复制进 DMG staging 再单独 staple `.app` 与 DMG，结果
  DMG 里那份是 staple 之前的拷贝，`xcrun stapler validate
  /Volumes/Phantty/Phantty.app` 会返回 "does not have a ticket
  stapled to it"（虽然 Gatekeeper 在线 cdhash 校验仍能放行）。改为
  先提交 `.app` notarize + staple，再打包 DMG 并对 DMG 二次 notarize +
  staple，两层都带本地 ticket，首次启动不再依赖联网。

## Changed

- **macOS: 隐藏标题栏右上角的 Settings / Help 按钮。** 这两个按钮在
  macOS 上跟原生菜单栏 (Phantty › Settings…, command palette) 重复，
  并且会和系统红绿灯按钮抢视觉空间。`TITLEBAR_CONFIG_W` /
  `TITLEBAR_HELP_W` 在 macOS 上 comptime 折叠为 0，相应绘制 / 命中
  逻辑跳过。Windows / Linux 标题栏不变。
