Skip to content

fix: 移除 SwiftUI App 壳改纯 AppKit 入口,根除自制构建空白设置窗 - #23

Merged
freestylefly merged 1 commit into
freestylefly:mainfrom
zhangweijian97:fix/placeholder-scene
Oct 2, 2026
Merged

freestylefly merged 1 commit into
freestylefly:mainfrom
zhangweijian97:fix/placeholder-scene

Conversation

@zhangweijian97

Copy link
Copy Markdown
Contributor

Closes #22

改动

  • @main 从 SwiftUI App 壳(唯一 scene 是占位 Settings { EmptyView() })迁到 AppDelegate.static main()(标准纯 AppKit 模板:NSApplication.shared → 设 delegate → makeMainMenu() → run());窗口本就全由 AppKit 控制器自管,壳是多余依赖,且正是它被 ad-hoc 构建的状态恢复复活成空白窗(见 自制 ad-hoc 构建冷启动弹空白「设置」窗(占位 Settings scene 被状态恢复复活) #22 定位)。
  • 连带必要补充:重建最小标准主菜单(App/编辑/窗口三个,全部 nil target 走响应链、autoenable 自动置灰)——SwiftUI App 运行时隐式合成的默认菜单随壳消失,不补则设置窗文本框的 ⌘Z/C/X/V/A、⌘W 关窗、⌘Q 退出失去路由。菜单标题走 L10n 双语。特意不加 ⌘, 设置项——那是占位 scene 的复活入口。
  • 局部 delegate 常量在 run() 阻塞期间强持有,抵消 app.delegate 的 weak。

验证

  • swift test 151/0 全绿(与纯 main 基线逐数一致,用干净树对照过);
  • 本地化、发布配置检查通过;
  • 自制 ad-hoc 构建实测:连续 3 轮冷启动零空白窗(修复前每轮必弹);键盘快捷键回归正常;
  • 官方 Developer ID 构建路径不受影响(本改动对它只是去掉了从不显示的 scene)。

唯一的 SwiftUI scene 是占位 Settings { EmptyView() },正常不可达,但
ad-hoc 自制构建冷启动时被 macOS 状态恢复成空白设置窗(Developer ID
构建不弹,已实验隔离)。窗口本就全由 AppKit 控制器自管,SwiftUI App
壳是多余依赖——改纯 AppKit 入口后没有 scene 就没有恢复对象。

SwiftUI App 运行时曾隐式合成默认主菜单,纯入口下键盘等价会失去路由:
设置窗文本框的撤销/拷贝/粘贴/全选、关窗、退出与隐藏。入口处按 AppKit
模板重建最小标准主菜单补齐对等,菜单标题走 L10n 双语。
@freestylefly
freestylefly merged commit 390ca10 into freestylefly:main Oct 2, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

自制 ad-hoc 构建冷启动弹空白「设置」窗(占位 Settings scene 被状态恢复复活)

2 participants