用途
macos-patterns 是一份针对 macOS 原生开发的参考指南,专门整理那些在 Web 开发中没有对应概念、容易让 Web 背景开发者出错的 macOS 专有模式。它的定位是在生成 macOS 代码之前查阅,避免 AI 自信地产出实际无法工作的实现方式。
主要能力
资料覆盖以下 macOS 开发主题:
- 菜单栏应用:两种实现路径。简单菜单用 SwiftUI 的 MenuBarExtra,需要完整控制时用 AppKit 的 NSStatusItem。MenuBarExtra 还支持 .window 样式实现弹出式菜单栏应用。
- NSPopover:用于菜单栏图标附着的富内容弹窗(如 Bartender、iStatMenus 风格)。
- 激活策略与 Dock 图标切换:应用可在运行时动态显示/隐藏 Dock 图标与 Cmd-Tab 存在感,菜单栏应用以 .accessory 启动,打开窗口时临时切换为 .regular,并给出多窗口场景下的引用计数实现。
- NSPanel 与 NSWindow:NSPanel 用于不应抢占焦点的辅助内容,如浮动覆盖层、调色板、工具窗口、检查器,以及需要在其他应用中保持可见的内容。
- 屏幕捕获排除:通过 panel.sharingType = .none 让浮动 UI 不出现在截图/录屏中。
- 窗口层级:macOS 的多级窗口层级系统(normal、floating、modalPanel、mainMenu、screenSaver、CGShieldingWindowLevel)。
- 集合行为:控制窗口与 Spaces、全屏、Cmd-Tab 的交互(canJoinAllSpaces、fullScreenAuxiliary、stationary、ignoresCycle、transient)。
- 屏幕几何:macOS 使用左下角原点坐标,Y 轴与 Web 相反;区分 frame 与 visibleFrame,并给出刘海屏检测方式。
- Quartz 与 AppKit 的 Y 轴转换:Core Graphics/Quartz 使用左上角原点,AppKit 使用左下角原点,资料给出双向换算公式。
- 多显示器:不应假设只有一块屏幕,给出按鼠标位置和按窗口查找屏幕的方式。
- 键盘快捷键三级方案:SwiftUI keyboardShortcut(应用内、聚焦时)、NSEvent 监视器(应用级或全局)、Carbon 热键(系统级,应用未聚焦时也生效)。
- 文件选择器:NSOpenPanel(打开文件/目录)与 NSSavePanel(保存),支持模态与 sheet 模态。
- 剪贴板:NSPasteboard 是多条目、多类型容器,写入前必须先 clearContents()。
- 拖放:SwiftUI 的 draggable/dropDestination 与 AppKit 的拖放目标注册。
- NavigationSplitView + Inspector 布局:侧边栏 + 详情 + 检查器的原生布局模式。
- 登录时启动:使用 SMAppService(macOS 13+),包含 requiresApproval 状态说明。
- Quick Look 预览:通过 QLPreviewPanel 展示系统快速查看面板。
- NSWorkspace 系统集成:打开 URL、在 Finder 中显示文件、获取最前台应用、读取辅助功能偏好。
- UserDefaults 与 @AppStorage:编程式读写与 SwiftUI 响应式绑定。
- ScreenCaptureKit:以原生 Retina 分辨率截取屏幕内容,包含点与像素的换算。
使用方式
资料将其定位为参考指南:在构建原生 macOS 应用、需要相关指导时查阅,在生成 macOS 代码前先参考,以避免产出不工作的模式。资料未提供安装命令或调用方式。
适用场景
适用于从 Web 开发转向原生 macOS 开发的场景,尤其是涉及菜单栏应用、浮动面板、窗口层级、全局快捷键、屏幕坐标、多显示器、剪贴板与拖放、系统集成等 Web 中没有对应概念的主题。
限制
资料未说明该技能的运行环境、依赖、平台版本要求或收费方式,这些信息暂未提供。文中给出的 API 与代码示例仅作为模式参考,实际可用性取决于目标 macOS 版本与开发环境。