折断
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @org-02qudk26/snap-zh。
技能介绍
要解决什么问题
iOS 团队在 UI 重构、多语言与多机型发布后,常见痛点是:XCUITest 靠文案或坐标定位,一改版就红;PR 里只有 xcodebuild test 日志,失败时拿不到可复现的界面证据;App Store 截图又要单独维护一套脚本,和回归测试用的标识符对不上。
Snap 的定位是 纯 iOS 的 XCUITest 与截图专家:在 Native / Builder 交付带 UI 的功能后,把「可测的标识符 + 可跑的流程 + 可归档的结果」补齐,而不是去写 SwiftUI 业务代码或跨平台 Appium 套件。
技能如何工作
核心信条可以概括为:先是标识符,再是快照。典型路径对应文档里的 SCOPE → IDENTIFY → AUTHOR → STABILIZE → CAPTURE → REPORT:
- IDENTIFY:审计
accessibilityIdentifier,约定screen.section.element分类;缺标识符时先回流 Native,而不是写脆弱的label查询。 - AUTHOR / STABILIZE:用 Screen Object 封装
XCUIElementQuery;同步用XCTNSPredicateExpectation+wait(for:timeout:),用launchArguments/launchEnvironment注入启动态,避免Thread.sleep和「先点进设置再测」式夹具。 - CAPTURE:失败用
XCTAttachment.screenshot(.lifetime = .keepAlways)留证;App Store 走 fastlane snapshot,与回归共用同一测试目标与页面对象,截图跑在独立 Scheme,避免拖慢 PR CI。 - REPORT:以
.xcresult为准,用xcresulttool解析附件与统计;需要真机矩阵时再走 BrowserStack / Sauce / Device Farm 的.xctestrun上传。
子命令可按意图切换:xcuitest、identifier、screenshot、appstore、page-object、ci、farm、xcresult。
边界与注意点
- 范围:仅 Xcode + Swift/SwiftUI/UIKit + XCUITest;Android UI 测试交给 Voyager,无 UI 的单元/集成层交给 Radar。
- 截图分工:XCUITest 截图是证据,不是像素级门禁;视图基线用
swift-snapshot-testing,或下游视觉工具,需先澄清意图。 - 反模式:坐标点击作主策略、把
Snapshot.images/提交主分支、与冒烟套件同一 Scheme 跑 fastlane 快照,都会放大 flake 与 CI 成本。
使用场景
- 登录、结账、入门等关键流程要在每次发版前用 XCUITest 做回归,且查询必须依赖 `accessibilityIdentifier` 而非文案
- PR 或夜间 CI 里 `xcodebuild test` 失败,需要从 `.xcresult` 用 `xcresulttool` 拉出失败截图与附件做排查
- 要按多机型、多语言矩阵生成 App Store 营销截图,并复用同一套页面对象与 fastlane `snapshot` 专用 Scheme
- 新功能从 Native 移交后,要先做标识符审计与 Screen Object 重构,再接入 GitHub Actions / Xcode Cloud 的测试流水线
适合人员
- 负责 iOS 发布质量、要把 UI 流程测进 XCUITest 目标且禁止用坐标/文案硬查的移动端 QA
- 维护 Swift/SwiftUI 工程、要在视图层补齐 `accessibilityIdentifier` 并配合测试同事约定命名分类的 iOS 开发
- 在 macOS CI 上配置 Bitrise/GitHub Actions,要固定 Xcode 版本、归档 `.xcresult` 并解析 JUnit 的 DevOps 工程师
- 产品或增长同学给出 App Store 截图 brief(流程、语言、机型),需要落地 fastlane 快照与 `simctl status_bar` 干净状态栏的工程师