Apple Notes CI Integration 介绍
用途
该技能用于在 CI(持续集成)环境中运行 Apple Notes 自动化。Apple Notes 自动化只能运行在 macOS 上,因为它依赖 Apple Events 子系统和 Notes.app。CI 流水线必须使用 GitHub Actions 的 macOS 运行器(macos-latest 或 macos-14)。但 macOS CI 运行器具有受限的 TCC(透明、同意与控制)权限,意味着在 CI 中通过 osascript 直接自动化 Notes.app 会失败。标准模式是对模拟的 JXA 客户端运行单元测试,而将真实的 Notes.app 集成测试保留在本地 macOS 机器或预先授予自动化权限的自托管运行器上。
前置条件
需要一个 Node 20+ 项目,具备确定性依赖和可模拟的 Notes 客户端边界。仅语法和模拟测试可使用 macOS 运行器;不要将 GitHub 托管运行器视为可进行真实 Notes 访问的环境。真实集成测试需要单独管理的自托管 Mac,具有交互式用户会话,并通过常规 macOS 或 MDM 控制授予 TCC 同意。
使用方式
通过注入文档中给出的模拟客户端,使单元测试独立于 Notes.app。在每次拉取请求时运行 npm ci、lint 和模拟测试。任何真实集成任务都应置于显式的仓库环境和自托管运行器标签之后;不要对 fork 或不受信任的拉取请求运行它。在任务摘要中记录 macOS 版本和任务的测试模式(模拟或集成),以免绿色的模拟任务被误读为设备覆盖。
该技能提供了一个 GitHub Actions 工作流示例(.github/workflows/notes-ci.yml),包含验证 macOS 版本、检查 JXA 脚本语法、运行模拟单元测试和验证 JXA 模板等步骤。还提供了一个模拟客户端 TypeScript 代码(MockAppleNotesClient),实现创建、列出、获取、搜索、删除笔记和获取文件夹等方法。
自托管运行器的 TCC 预授权步骤:在系统设置 > 隐私与安全性 > 自动化中,为 CI 用户终端授予访问 Notes.app 的权限,并用 osascript 命令验证。文档强调不要用未记录的工具修改 TCC 数据库或禁用 SIP,应使用受管理的 PPPC/MDM 配置文件或在自有运行器上交互式授予同意。
适用场景
适用于需要在 CI 中对 Apple Notes 自动化脚本进行语法校验和模拟测试的 Node.js 项目,以及需要选择性在自托管 Mac 上运行真实 Notes 集成测试的团队。
限制
GitHub 托管的 macOS 运行器无法进行真实 Notes 自动化。真实集成测试需要自托管 Mac 和预先授予的 TCC 权限。文档还列出了常见错误及解决方案,包括 CI 中权限被拒、osascript 语法错误未被捕获、macos-latest 上的测试不稳定、本地通过但 CI 失败、等待 Notes.app 超时等情况。