SuperAPI AI 工具集

macos-native

编程与开发

查看项目

更新于 10-16 10:39

技能介绍

macOS 原生开发

面向 AppKit 与现代 macOS API 构建原生 macOS 应用的综合性指南。

框架概览

框架 适用场景 说明
AppKit 传统 Mac 应用 完全控制,成熟
SwiftUI 现代 Mac 应用 跨平台,声明式
Catalyst iPad 应用移植到 Mac 快速移植,有局限
AppKit + SwiftUI 混合方案 两者优势结合

用途与适用场景

该技能用于指导开发 macOS 原生应用,涵盖以下场景:

  • 构建传统 Mac 桌面应用(AppKit)
  • 开发菜单栏应用(Menu Bar App)
  • 基于文档的应用(Document-Based Apps)
  • 系统集成功能(服务、拖放、通知)
  • 处理沙盒与权限(App Sandbox、Security-Scoped Bookmarks)
  • 准备 Mac App Store 提交

适用对象是需要调用 macOS 专属 API、构建 Mac 原生界面或系统扩展的开发者。

主要能力

AppKit 基础

资料提供了 AppDelegate 的完整结构示例,包括:

  • applicationDidFinishLaunching、applicationWillTerminate、applicationShouldTerminateAfterLastWindowClosed 等生命周期方法
  • 通过 NSWindow 创建主窗口,设置 NSWindow.StyleMask(titled、closable、miniaturizable、resizable)、标题与 contentViewController
  • 使用 NSViewController 与 loadView、viewDidLoad 构建视图控制器
  • 通过 NSScrollView + NSTableView 搭建列表界面,使用 NSLayoutConstraint 设置约束
  • 实现 NSTableViewDataSource、NSTableViewDelegate 填充数据

菜单栏应用

  • 使用 NSStatusBar.system.statusItem 创建状态项,设置按钮图像与动作
  • 使用 NSPopover 构建弹出内容,behavior 设为 .transient
  • 通过 togglePopover 控制弹出层的显示与关闭,并调用 NSApp.activate
  • 使用 NSMenu 构建主菜单,包括 App 菜单、File 菜单、Edit 菜单,并设置快捷键 keyEquivalent

基于文档的应用

  • 自定义 NSDocument 子类,重写 autosavesInPlace、makeWindowControllers、data(ofType:)、read(from:ofType:)
  • 通过 Info.plist 的 CFBundleDocumentTypes 声明文档类型、角色与内容类型

系统集成

  • 服务:通过 NSPasteboard 提供系统服务,并在 Info.plist 的 NSServices 中注册
  • 拖放:在 NSView 中注册拖放类型,实现 draggingEntered 与 performDragOperation,处理文件 URL 与字符串
  • 通知:使用 UNUserNotificationCenter 请求授权并调度本地通知

沙盒与权限

  • 常见 Entitlements 配置:App Sandbox、网络客户端/服务端、用户选择文件读写、下载目录读写、摄像头、麦克风、Hardened Runtime(allow-jit、allow-unsigned-executable-memory)
  • Security-Scoped Bookmarks:保存、解析书签,并通过 startAccessingSecurityScopedResource / stopAccessingSecurityScopedResource 访问资源

使用方式

资料以 Swift 代码示例为主要形式,代码可直接用于 Xcode 工程中的对应文件。典型使用流程包括:

  1. 在 AppDelegate 中创建主窗口并设置内容视图控制器
  2. 在视图控制器中通过 Auto Layout 约束搭建界面
  3. 按需选择 AppKit、SwiftUI、Catalyst 或混合方案
  4. 为菜单栏应用配置 NSStatusItem 与 NSPopover
  5. 在 Info.plist 中声明文档类型、服务或隐私描述
  6. 在 entitlements 文件中配置沙盒权限

资料未提供安装命令或获取方式,相关内容暂未提供。

限制与注意事项

  • 所有示例基于 Cocoa 与 Foundation 等系统框架,不涉及第三方依赖
  • 资料中未说明该技能支持的最低 macOS 版本或 Xcode 版本
  • 未提供收费、价格或授权方式信息
  • 未提供实际的安装或集成步骤

检查清单

Mac App Store 提交

  • 启用 App Sandbox
  • 启用 Hardened Runtime
  • 所有 entitlements 均有正当理由
  • Info.plist 中包含隐私描述
  • 提供所有尺寸的应用图标
  • 准备 App Store 截图
  • 不使用私有 API

最佳实践

  • 支持键盘导航
  • 尊重系统外观(深色/浅色)
  • 支持全屏
  • 处理窗口恢复
  • 实现正确的撤销/重做
  • 支持标准键盘快捷键