Repository navigation
NotchRail v0.0.9 (开发版): 双屏独立面板架构、全局图元注册表与流体拖拽排序
Pre-release
Pre-release
⚠️ 版本说明:本版本为开发版 (Development Build),闭源于 GitHub Issues #50 + #51~#54。核心是将单例聚焦跟随架构升级为双屏物理独立的多实例面板拓扑,并建立全局应用图元注册表以根治非激活屏图标空白,同时完成事件驱动扫描管线与灵动岛内流体拖拽排序。
✨ v0.0.9 核心更新与修复
-
🖥️ 双屏多实例独立面板架构与物理隔离状态机 (Ticket #53):
- 主屏常驻
primaryPanel,外接屏按需装载独立externalPanel,各自搭载物理隔离的IslandStateMachine,心跳由MenuBarSyncCoordinator集中聚合; IslandWindowCoordinator收口isPrimaryDisplay/externalOwnedDisplayID单一事实来源,第三块及以上屏幕无归属面板时 Fail-Fast 返回nil,彻底杜绝跨屏抢夺、徽标闪烁与窗口误锚定。
- 主屏常驻
-
🗄️ 全局应用图元注册表 (Application Asset Vault),根治非激活屏图标空白:
- WindowServer 在非聚焦屏为节能会暂停菜单项光栅化(截图返回全透明)。
IconResolver维护以bundleIdentifier为索引的全局注册表,任一激活屏成功截取真实位图即登记入库; - 非激活屏展开灵动岛时凭本轨确凿 Bundle ID 直出真实超清位图,0 延迟、0 兜底、0 错配;
resolveCachedIcon(for:)收口「本屏内存 → 全局注册表 → 跨窗持久缓存」三层合法图元查找唯一入口,消除多处??级联的语义漂移。
- WindowServer 在非聚焦屏为节能会暂停菜单项光栅化(截图返回全透明)。
-
⚡ 事件驱动极速扫描管线,根治发热卡顿 (Ticket #51 / #52):
- 以进程生命周期与窗口层级事件驱动替代后台高频心跳轮询,消除高频事件下的堆分配抖动;
MenuBarAXResolver空间映射缓存 TTL 收敛为具名常量MAPPING_CACHE_TTL = 60.0,由进程事件定向失效;- 批量窗口提取与增量扫描,日常刷新耗时稳定控制在毫秒级。
-
🖱️ 灵动岛内流体拖拽重排图标 (Ticket #54):
- 支持在灵动岛内直接拖拽重排溢出的状态项顺序,并持久化至
customItemOrder; - 剔除误触发的非预期右键操作,拖拽判定与点击分发严格互斥。
- 支持在灵动岛内直接拖拽重排溢出的状态项顺序,并持久化至
-
🎯 外接屏顶边缘热区契约对齐:
isPointInExternalCenterHotZone的垂直阈值由「可选值 + 状态栏高度兜底」改为显式契约默认值 4.0pt,杜绝「单测验默认分支、生产传另一阈值」的语义脱漂,防误触时序精确可控。
-
🧹 架构清理:
- 按指令从项目内彻底移除状态项隐藏功能(
ignoredBundleIDs及其 7 层实现),保留无溢出隐藏胶囊、全屏隐退、⌘H 应用级隐藏等同名但无关的能力。
- 按指令从项目内彻底移除状态项隐藏功能(
🔧 补丁更新(2026-09-11,安装包资产已重新构建)
- 修复「启动即弹出空白设置面板」:只要声明了 SwiftUI 场景,macOS 会在应用启动时自动创建并显示该场景的窗口。v0.0.9 的
Settings场景渲染的是EmptyView,因此启动即弹出一个空白窗口;自建设置窗口一关闭,它就暴露出来。现已弃用 SwiftUIApp协议、改由 AppKit 手动启动,该窗口彻底消失。 - 偏好设置面板改用侧边栏版式:
TabView+.tabItem在 macOS 上会渲染成传统的顶部标签栏,现改为List(selection:)+.listStyle(.sidebar)分区导航。 - 设置窗口生命周期加固:只复用当前可见的窗口,关闭时释放引用并剥离托管视图。
📦 资产下载
- DMG 镜像安装包:
NotchRail-v0.0.9.dmg - ZIP 绿色压缩包:
NotchRail-v0.0.9.zip