test-iphone-apps 是 Opensteer 仓库中用于验证 iPhone 应用相关集成的一套测试技能,重点在于以尽可能低的成本选择合适的回归检查,并明确区分哪些验证已经完成、哪些仍未验证。
用途 该技能用于检查 iPhone 应用集成中 Swift 原生核心与宿主机 TypeScript 实现之间的通信协议一致性,以及生产 Swift 代码在受控环境中的调度行为。它并非验证真实 Apple 系统授权流程的工具,而是对纯逻辑与通信层进行回归保护。
主要能力 第一层是宿主机上的纯逻辑检查。Swift 核心与 Swift↔TypeScript wire 向量属于纯逻辑,可在宿主机上运行,CI 会在相关包变更时选择执行。可用命令包括:通过 pnpm exec tsx scripts/generate-apple-data-contracts.ts 生成数据契约;分别对 packages/apple-data 和 apps/mobile/modules/iphone-apps/ios 执行 swift test;构建 IphoneAppsVectors 产品;以及在设置 OPENSTEER_IPHONE_APPS_NATIVE_TESTS=1 后运行 vitest 的 iphone-apps-wire 与 helper-data-contracts 测试。其中 wire 测试会执行生产 Swift 核心,并核对其签名和帧格式是否符合宿主机 TypeScript 实现。
第二层是非模拟器旅程。该流程从 VM 负载启动真实 Host 和一次性 PostgreSQL 集群,再把 Host WebSocket 帧桥接到 IphoneAppsNativeJourney,将生产 Swift 证明、wire 和调度与显式伪造的日历、位置、照片系统端口串联起来;位置和照片在其后运行生产 provider。运行需在干净修订上通过 pnpm test:vm 并传入相应参数,脚本内设置 DEVELOPER_DIR 后执行 run-in-vm.sh。结果文件 native-journey-result.json 会记录 Host 帧、所有者会话审批、伪造保存次数、位置获取计数和所选照片元数据,并明确列出真实 CoreLocation、PhotoKit 与同意对话框属于未验证项。包装脚本在每次退出时停止 PostgreSQL 并删除其数据目录。
使用方式 在受控移动 VM 中,可用 apps/mobile/modules/iphone-apps/fixture/run.sh <simulator-udid> seed iphone-apps-fixture-<unique-id> 创建一个合成日程、一个提醒和两个联系人;再次以 snapshot 和相同标记运行,可独立于 Opensteer 检查系统存储。脚本要求在检出目录之外设置 OPENSTEER_IPHONE_APPS_EVIDENCE_DIR 以存放构建和结果文件,构建独立的 Release fixture,写入结果后在返回前终止 fixture 应用。若缺少可写日历或提醒源,会作为前置条件失败记录在结果中。
适用场景与限制 该技能适用于 Opensteer 项目中 iPhone 应用集成的回归测试、通信协议一致性校验,以及人工验收或发布验收前的受控验证。限制在于:这些检查不能证明真实的日历、联系人、提醒授权;模拟器预授权可验证数据操作但无法证明同意对话框;iOS URLSession 适配器和真实 Apple 存储需要模拟器旅程;物理签名 Release 安装与同意旅程属于保留的手机所有者。日志、结果行和截图仅应用于人工验收或发布验收;无法获得的模拟器或系统对话框必须标记为未验证,绝不能记为通过。