05
第四步:把任务放进远程 Mac 持续集成
AppIntentsTesting 可以接入持续集成,但“能执行”与“适合无人值守运行”不是一回事。远程 Mac 节点至少要固定以下条件:
- Xcode 版本与项目要求一致;
- macOS 版本满足 Xcode 要求;
- iOS Simulator 运行时已经安装;
- 应用 Target 与 UI Testing Target 使用同一个 Team;
- 测试账号、签名身份和钥匙串状态可在重启后恢复;
- 测试数据初始化和清理不依赖人工点击;
- 每次任务都保存
xcresult、控制台日志和节点环境信息。
截至 2026 年 9 月 1 日,Apple 的发布记录显示,Xcode 27 beta 6 于 2026 年 8 月 24 日发布,iOS 27 beta 8 于 2026 年 8 月 31 日发布;Xcode 系统要求页面列出 Xcode 27 beta 6 需要 macOS Tahoe 26.4 或更高版本,并包含 iOS 27 SDK。Apple 发布记录Xcode 系统要求
因此,远程节点不要只写“安装最新版 Xcode”。应把实际版本、SDK、模拟器运行时和构建号写入验收日志。Beta 阶段 API、工具链行为和已知问题都可能变化,不能把当前测试结果承诺成长期稳定能力。
代码签名是远程部署中最容易被低估的故障源。应用能在本地运行,不代表远程 Mac 上的测试 Target 也能安装;缺少私钥、Team 选错、Bundle ID 不一致、Provisioning Profile 过期,都可能在测试执行前失败。Apple 建议通过 Xcode 的账户和证书管理功能同步签名身份;如果证书存在但缺少对应私钥,该身份仍然不能用于签名。同步代码签名身份的官方说明
| 路由方式 |
适合任务 |
优点 |
主要风险 |
建议评分 |
| 本地 Mac 手动执行 |
开发中的单次调试 |
反馈快,查看界面方便 |
容易漏测,依赖个人环境 |
3 / 5 |
| 普通 CI 构建节点 |
单元测试、编译、静态检查 |
适合每次提交自动执行 |
未必保留模拟器与登录状态 |
3.5 / 5 |
| 专用远程 Mac 节点 |
AppIntentsTesting、Spotlight、连续 Intent |
可固定工具链并长期运行 |
需要管理签名、重启和日志 |
4.5 / 5 |
| Beta 独立验收节点 |
iOS 27 与 Xcode 27 兼容性回归 |
不影响正式发布环境 |
Beta 行为可能变化 |
4 / 5 |
持续集成任务最好拆成四条路由,而不是把所有测试塞进一个脚本:
- 普通单元测试:检查纯业务逻辑和数据转换。
- UI 自动化:检查关键页面和用户操作路径。
- AppIntentsTesting:检查 Intent、Entity、Query、连续调用和部分系统集成。
- 正式签名发布任务:检查归档、导出、上传和发布权限。
这样做的价值在于失败含义更清楚。单元测试失败通常不需要启动模拟器;AppIntentsTesting 失败要看应用进程和测试进程日志;正式签名任务失败则优先检查证书、Profile 和发布权限。
远程节点的日志保存不能只保留终端最后几行。xcresult 应作为每次任务的主要产物,同时保存测试目标、提交哈希、Xcode 构建号、SDK、模拟器设备标识、macOS 版本和签名检查结果。这样即使不持续观看远程桌面,也能判断是 Query 回归、索引延迟、签名失效,还是节点重启后环境没有恢复。
如果团队还需要建设通用的 iOS 测试节点,可以参考 iOS 自动化测试服务器部署思路;若重点是长期保留 Xcode 27、模拟器和签名状态,则应优先按 远程 Mac 配置与使用方案 的思路建立独立节点,而不是把 Beta 工具链覆盖到正式打包机上。