LESSON 21 / 575 分钟
AppKit 与桌面应用思维
Mac 应用需要窗口、菜单、快捷键、文件操作和更灵活的输入。
用你的前端经验理解
它更像真正的桌面应用工作区,而不是加宽的移动网页;窗口和菜单是应用架构的一部分。
01 / 理解问题
为什么需要它
macOS 应用经常同时有多个窗口、文档与菜单命令,不能把整个应用想象成只有一个全屏页面的手机 App。AppKit 提供成熟的桌面窗口和事件体系;SwiftUI 可以承担很多界面,再在确有需求时桥接 AppKit。先理解桌面行为,比急着复刻复杂自定义窗口更重要。
它是怎样工作的
NSApplication 管理应用级行为,NSWindow 表达窗口,NSView 负责视图。响应者链让命令沿当前焦点寻找处理者,因此复制、粘贴和删除应作用于当前内容,而不是固定的全局对象。窗口关闭不必然代表应用退出;多个窗口可以共享服务,同时保有各自选中项和草稿。
02 / 掌握要点
把关键概念连起来
1
AppKit
NSView、NSViewController、NSWindow 等提供 macOS 控件、窗口和事件处理。与 UIKit 职责相似,但 API 并不相同。
2
SwiftUI
WindowGroup、Settings、Commands、MenuBarExtra 能完成许多桌面需求;精细能力可以桥接 AppKit。
3
文件与权限
沙盒限制文件访问。通过系统选择器获得用户授权,长期访问要了解 security-scoped bookmark。
03 / 案例推演
为两个阅读窗口安排状态
- 应用级仓库保存所有文章;每个窗口分别持有当前选中文章 ID,不能把选中项放进唯一全局变量。
- 从菜单触发删除时,先识别当前焦点对应的窗口与文章,再执行动作,另一窗口根据共享仓库更新。
- 关闭一个窗口后确认另一个仍可用;退出整个应用前关键编辑数据应已有明确保存策略。
这里需要你亲自判断
菜单栏 popover 不是完整应用生命周期;全局快捷键、登录启动、通知等能力需要分别确认平台 API 和权限。
04 / 动手验证
做一个小练习
为一个菜单栏待办应用列出:输入、主窗口、设置、通知和退出入口。
- 用两个窗口打开不同文章,列出应该共享与必须独立的状态。
- 解释为什么点击窗口关闭按钮不等于结束全部后台服务。
展开参考思路与验收标准
文章仓库和账号服务可以共享,选中项、滚动位置和未提交草稿通常属于窗口。桌面命令的作用目标应随焦点变化,而不是由最近一次更新的全局变量猜测。
05 / 检查理解
macOS 原生窗口管理的传统框架是什么?
答对理解题后即可标记完成