LESSON 29 / 575 分钟
macOS:窗口、菜单栏与文件
桌面用户希望应用支持键盘、多个窗口和系统文件工作流。
用你的前端经验理解
已有 React 桌面网页经验能帮助信息组织,但 Cmd 快捷键、窗口行为和菜单栏不能只靠网页习惯设计。
01 / 理解问题
为什么需要它
macOS 更强调连续工作、文件和多窗口。菜单栏工具还需要在主窗口不出现时提供入口。对“记着”这类事项助手,可以先实现菜单栏 popover 中的输入、列表和本地保存,再接入全局快捷键、语音或 AI,避免工具尚不能保存就先处理复杂系统集成。
它是怎样工作的
SwiftUI 的 Scene 描述窗口、设置和菜单栏等应用场景。MenuBarExtra 可以承载轻量入口,但它不是无限运行的后台服务器。普通应用快捷键与系统全局快捷键不是一回事,后者需要单独实现与冲突处理。文件选择器授予的访问范围也不同于随意读取任意磁盘路径。
02 / 掌握要点
把关键概念连起来
1
入口
根据任务选择 WindowGroup 或 MenuBarExtra;给菜单栏应用保留设置和退出方式。
2
交互
提供 Commands、快捷键、焦点移动、拖放和合适的窗口尺寸;支持用户改变窗口大小。
3
分发
App Store 与站外分发不同;站外分发通常关注 Developer ID 签名、公证以及 Gatekeeper。
03 / 案例推演
设计一个菜单栏待办闭环
- 菜单栏打开后立即允许输入,回车保存到仓库;关闭 popover 不丢失已经确认保存的数据。
- 主窗口和菜单栏使用同一仓库,但各自的筛选与选择独立;菜单命令根据当前场景作用。
- 导出时让用户选择目标位置,处理取消和写入失败。需要长期访问用户选择文件时,再研究授权保留与恢复。
这里需要你亲自判断
别默认菜单栏 App 不需要权限、生命周期管理或分发签名。
04 / 动手验证
做一个小练习
用 AI 实战中的“菜单栏待办”模板开始一个最小 macOS 工程。
- 实现菜单栏添加一项,并在主窗口看到同一记录。
- 关闭窗口、关闭 popover、退出 App 三种动作分别验证数据与进程行为。
展开参考思路与验收标准
窗口消失不是数据应被删除的信号。一个可靠的桌面小工具先保证输入、保存和恢复,再增加快捷入口;不能把模拟器里的 iOS 交互直接放大后当成 macOS 体验。
05 / 检查理解
菜单栏应用至少应提供哪个基础控制?
答对理解题后即可标记完成