SuperAPI AI 工具集

preflight-permissions

测试与质量

查看项目

更新于 10-16 07:11

技能介绍

Preflight Permissions 是一个 macOS 应用 UI 测试权限预检技能,用于在自动化 UI 测试运行前确保所有 macOS 系统权限已授予,避免 XCUITests 卡在权限弹窗上或因 TCC 拦截权限而静默失败。

用途与使用时机 该技能在新建项目时、克隆仓库后,或测试因权限相关错误失败时运行一次即可。它是 journey-builder 和 journey-loop 的前置条件。

主要能力

  1. 检测项目配置:读取 project.yml(XcodeGen)或扫描 *.xcodeproj,识别 App bundle ID、UI 测试 target 名称、App target 名称、现有 CODE_SIGN_IDENTITY 以及 entitlements 文件,并在继续前报告发现结果。
  2. 创建自签名代码签名证书:以 /macos-codesign 技能的方式创建名为 "{AppName} Dev" 的证书(例如 "Percev Dev")。如果证书已存在则跳过创建。若证书刚创建或 CODE_SIGN_IDENTITY 为 "-",会更新项目:存在 project.yml 时将其中的 CODE_SIGN_IDENTITY 改为证书名并运行 xcodegen generate;无 project.yml 时用 sed 或手动编辑 .pbxproj 设置 CODE_SIGN_IDENTITY。
  3. 构建应用:使用 xcodebuild build 构建 App target,生成已签名二进制。构建失败时会先诊断修复,常见问题包括证书未受信任(重新运行 security add-trusted-cert)或钥匙串被锁定(security unlock-keychain)。
  4. 检测所需权限:读取 entitlements 文件和源码,判断需要哪些 TCC 权限(屏幕录制、麦克风、辅助功能、自动化),并给出 System Settings 路径;同时用 grep 搜索相关 API 调用(如 ScreenCaptureKit/CGWindowList、AVCaptureDevice/AVAudioSession、AXIsProcessTrusted/AXUIElement),生成所需权限清单。
  5. 引导用户授权:针对每项所需权限给出明确操作说明,并用 open 命令自动打开相应系统设置面板(如 x-apple.systempreferences:com.apple.preference.security?Privacy_ScreenCapture);还会先启动一次 App 使其出现在 TCC 权限列表中,再等待用户确认已授权。
  6. 冒烟测试验证:写入一个最小 XCUITest(PermissionSmokeTests),验证 App 能正常启动、窗口出现且屏幕上没有权限弹窗阻塞,并附加截图;用 xcodebuild test 运行该测试验证权限有效性。
  7. 输出报告:给出清晰的状态报告,包含证书、构建、屏幕录制、麦克风、辅助功能、冒烟测试等各项的通过或失败状态,并汇总为「READY FOR AUTOMATED TESTING」或「BLOCKED」。

使用方式 按步骤执行:检测项目配置 → 创建自签名证书 → 构建应用 → 检测所需权限 → 引导用户授权 → 运行冒烟测试 → 输出报告。全程包含具体命令,如 security find-identity、openssl req、security import、security add-trusted-cert、xcodebuild build/test、open 等。

适用场景 适用于 macOS 应用的 XCUITest 自动化测试前置准备,尤其是涉及屏幕录制、麦克风、辅助功能等需要用户手动授权的场景;作为 journey-builder 与 journey-loop 的前置技能使用。

限制与规则 永不跳过证书步骤——ad-hoc 签名会导致每次重建后权限被撤销;永不尝试以程序方式授予 TCC 权限——只有用户能在系统设置中完成;始终自动打开相关系统设置面板;始终在请求用户授权前先启动一次 App;始终运行冒烟测试验证,不轻信「我已授权」;冒烟测试失败时先判断是权限问题还是构建问题,再要求用户重新授权。该技能会修改 project.yml 和/或构建设置,需提交这些改动以便团队受益。

分类说明:分类为 testing(测试与质量)。