截图要反复手工拍、不同语言的画面还容易混在一起?
最快解法:先让一条代表性 UI 测试在 Xcode 中稳定通过,再用 fastlane snapshot 批量采集并逐张验收;这套流程需要能运行 macOS、Xcode 和 iOS 模拟器的 Mac。
这篇文章适合要准备多语言商店素材、维护多个模拟器目标,或没有本地 Mac、正在评估远程 Mac 的 iOS 独立开发者与小团队。
fastlane snapshot 自动生成 iOS 截图:先跑通单设备基线
fastlane snapshot 不是独立的界面录制器。它借助 Xcode UI 测试驱动应用,再把测试中指定的截图整理到输出目录。先选一个代表性模拟器和一条核心用户路径,确认测试能启动应用、走到目标界面并生成文件,再扩设备和语言。fastlane 的官方截图指南列出了 UI Test target、共享 scheme、SnapshotHelper 与截图调用的初始化方式。
| 采集方式 | 适合什么情况 | 你需要额外确认的事 |
|---|---|---|
| UI 测试 + fastlane snapshot | 同一用户流程要重复采集,或需按语言、模拟器目标整理截图 | 测试路径、启动状态和截图调用点是否稳定 |
| 在 Device Hub 手动捕获 | 临时核对界面、翻译或视觉细节 | 人工导航后保存并整理文件,重复场景更依赖操作一致性 |
Apple 的 Device Hub 支持从模拟或实体设备捕获截图,并将文件保存到 Mac;这适合临时检查,不会替你建立可重复的 UI 测试路径。相关操作可参考 Apple 的设备截图说明。
建议按这个里程碑建立基线:
- 在 Xcode 项目中准备 UI Test target,并创建可供命令行使用的共享 scheme。
- 按 fastlane 指南初始化截图辅助文件,将它加入 UI Test target。
- 在测试启动阶段调用
setupSnapshot(app),再启动应用;在每个目标界面前后放置有辨识度的snapshot("LoginScreen")一类名称。 - 先在 Xcode 里确认 UI 测试本身可通过,再运行
fastlane snapshot检查截图输出与摘要。 - 记录成功采集的测试路径、scheme 和目标设备;不要把一次测试成功当作全部设备已验证。
具体初始化与调用方式以 fastlane 截图指南和 capture_ios_screenshots action 文档为准。特别要注意:只在 Xcode 中点运行 UI 测试,不等于 fastlane 已完成截图归档;截图整理与输出目录由 fastlane 流程处理。
多语言截图:应用界面语言与商店元数据分开管理
多语言 App Store 截图应如何采集?
在配置中列出要采集的语言,让测试在对应语言环境下启动应用;再核对画面中的实际文案是否确实切换。fastlane 文档说明,语言与设备目标分别传入测试流程,并按语言和设备整理截图。若项目还要改变模拟器系统语言,应确认配置中的 localize_simulator 与应用自身的本地化行为符合预期。
截图呈现的是应用界面,不等于 App Store Connect 中已创建或完成相应语言的商店元数据。Apple 将截图作为可本地化的版本信息管理;上传时还要选对语言和设备位置。
| 核对项 | UI 测试与截图采集 | App Store Connect 商店素材 |
|---|---|---|
| 语言来源 | 应用本地化资源、测试启动时的语言环境 | 你选择的商店语言与对应素材位置 |
| 主要风险 | 测试环境语言没切换,截图仍是默认语言 | 截图传入了错误语言栏,或元数据未完成 |
| 验收方法 | 打开生成文件,核对可见文案和界面状态 | 上传前逐语言检查目标栏位与最终预览 |
先做一张语言映射表,至少记下测试使用的语言、预期界面文案、输出文件夹和商店上传目标。若某个语言的应用界面尚未本地化,不要只改商店语言就把默认语言截图当作该语言素材。
多模拟器覆盖:按项目支持范围选择目标
同一套截图测试能否覆盖多个模拟器目标?
可以在配置中指定多个设备目标,让同一套 UI 测试针对这些目标采集;但设备名单要按项目真正支持的界面与当前提交要求维护。fastlane 的配置文档包含 devices 和 output_directory 等选项,Apple 的 Device Hub 文档也说明可以添加不同型号和系统版本的模拟器。
不要把“某一轮成功”写成“所有机型都已覆盖”。布局断点、字号、导航方式和系统版本差异,都可能让同一条测试在另一台模拟器上走到不同界面或失败。
配置设备前,先在 Apple 的截图规格说明核对当前要求,再将项目目标设备与需要提交的截图尺寸对应起来。Apple 说明,截图文件可使用 JPEG、JPG 或 PNG;每种设备尺寸至少需要一张,最多可上传十张。规格页会随设备与提交要求更新,所以不要把某个模拟器的尺寸或一次导出结果当成永久标准。
对比时要分清“自动化覆盖”和“提交覆盖”:前者是你实际运行过的模拟器目标,后者是 App Store Connect 当前要求的素材位置。Apple 允许在界面适用时使用较高分辨率截图自动缩放,也允许按设备尺寸上传专属截图;是否适用要看你的界面和提交需求。具体素材处理方式可核对 Apple 的截图上传说明。
截图不稳定:先固定应用状态,再调整重试
截图里出现加载指示器、登录页或变化中的列表,通常不是多加模拟器就能解决。先检查测试账号是否有稳定登录状态、网络内容是否可预测、测试数据是否每次一致,以及动画或异步请求是否会改变截图时机。
fastlane 文档提到可在网络请求完成后等待,并提供 UI 测试重试选项;重试只能帮助处理偶发失败,不能修复登录状态、测试数据或页面等待逻辑本身。请以当前工具文档和你实际运行的测试为准。
逐项排查:为测试准备固定数据;避免依赖会变化的线上列表;在页面出现可断言的就绪状态后再采集;检查截图调用点是否落在过渡动画或加载阶段。如果只有特定设备或语言失败,就先缩小目标范围复现,不要用一次重跑成功掩盖问题。
没有本地 Mac:远程执行也要先验 UI 测试
远程 Mac 能否承担 fastlane 截图任务?
你需要在可运行 macOS、Xcode 和所选 iOS 模拟器运行时的 Mac 上执行 UI 测试,再运行 fastlane snapshot。Apple 的设备管理文档说明可在 Xcode 的 Device Hub 管理模拟器与实体设备;远程操作并不会免除这些环境依赖。
远程执行时,优先确认所选 Xcode 能识别项目 scheme、目标模拟器运行时可用、UI 测试能在该会话中启动。测试通过后,再检查生成的截图目录是否存在、文件是否能从远程环境取回。若登录会话断开或自动化终端拿不到图形会话,测试可能与本地交互时表现不同;要在实际使用的连接方式下验证,而不是只看命令是否启动。
MacUDP 这篇内容不对任何具体节点、Xcode 版本或截图执行结果作本站实测承诺;是否可用应由你在选定环境里实际运行 UI 测试确认。你可以先通过 MacUDP 帮助中心核对远程访问与文件交付方式,再按项目的截图频率评估环境。
上传前验收:采集完成不代表素材可提交
生成成功只说明测试产生了截图文件,不代表语言、设备画面、商店配置或审核要求都已核实。Apple 的审核截图指南要求截图展示应用实际使用状态;素材可以包含说明性视觉元素,但不能遮挡主要功能。
fastlane 的 deliver 可以从按语言组织的目录上传截图。运行前查看 deliver 官方文档,确认截图路径、目标语言,以及是否启用会覆盖已有截图的选项;上传动作与素材审核是不同环节,上传后还要在 App Store Connect 检查最终显示结果。
- [ ] 每张截图对应的语言与画面文字一致。
- [ ] 设备目标与实际截图尺寸、项目支持范围相符。
- [ ] 登录状态、测试数据、加载指示器和错误提示已人工检查。
- [ ] 输出目录中没有旧截图或误采集的测试界面。
- [ ] 上传前核对 deliver 的截图目录、语言映射与覆盖设置。
- [ ] 上传后在 App Store Connect 复查素材位置与预览;不要把上传成功等同于审核通过。
当截图任务只偶尔发生,手动在本地 Mac 上采集可能更简单;如果要持续覆盖多语言、多设备或需要团队共享稳定环境,远程 Mac 可省去专门购置与维护一台常驻机器的工作,但仍需你维护 Xcode、模拟器和测试数据。若要持续在可运行 Xcode 与模拟器的 Mac 上执行采集,可先查看 MacUDP 的远程方案,再按实际任务频率决定是否租用;需要物理设备接口或长期高频占用固定硬件时,应先评估自有设备是否更合适。
