Goldie:用编码Agent自动生成App Store截图与预览视频的合规流水线
2026/9/10 2:24:49 网站建设 项目流程

GitHub每日热评这个栏目,最近连续几天被一个叫Goldie的编码Agent刷屏。简单说,Goldie做了一件看起来很“窄”但让iOS团队非常心动的事:自动生成App Store上架用的截图和预览视频,并且在生成之后跑一遍苹果上架合规校验。为什么这件事值得单独开一篇来聊?因为如果你维护过哪怕一个上架App,就知道截图和预览视频一直是版本迭代里最容易被拖到最后一刻、又最容易因为低级错误被拒审的环节。尤其是独立开发者和出海团队,要适配多语言、多机型,每改一版界面就要重新做一轮素材。Goldie相当于把这条繁琐且容易出错的生产线,用Agent的方式串起来,让开发者从“做图做视频”里解脱出来,把精力放回功能本身。这篇文章我从一个实际使用者的角度,拆一拆它的设计思路、核心实现、踩坑记录,给同样被素材和审核折腾的朋友做个参考。

1. Goldie到底解决了什么痛:从编码Agent到上架素材流水线

1.1 编码Agent和普通自动化脚本的差别在哪

先说清楚Goldie的定位。它不是一个简单的Fastlane snapshot插件,也不是一个“批量截屏工具”,而是一个编码Agent。

传统自动化的逻辑是你把每一步写死:启动模拟器、进入某个页面、按坐标截图、保存。这套流程只要界面结构一变,脚本就崩了,需要人去维护一堆脆弱的定位逻辑。Goldie不一样的地方在于,它能理解任务本身,自己拆解步骤、感知界面状态、动态调整操作路径。

举个例子。你告诉它“首页顶部banner和推荐位这两个界面,各出一张6.7英寸的截图,产品名替换为Goldie”,它不会机械地按坐标去点,而是会读取模拟器当前的视图层级,找到对应控件,确认进入目标页面后再截图。这个能力意味着,即使你的界面在某些机型上布局发生了变化,它也能根据实时渲染结果完成操作,而不是靠一组写死的坐标硬撑。

从GitHub社区里的讨论来看,很多开发者一开始都以为Goldie是又一个“截图脚本”,真正上手之后才发现它更像一个“懂审核规则的自动化QA”——这也是它能连续几天挂在热评上的原因。工具本身解决的不只是“省人力”,而是把一套原本依赖人工经验才能完成的流程,沉淀成了可复制、可自动运行的工作流。

1.2 为什么App Store素材生产是天然切入口

做iOS开发的人都清楚,截图和预览视频在发版流程里是一个很尴尬的存在。功能开发有技术方案,UI设计有设计稿,但素材生产往往是在所有功能都冻结之后才开始,留给它的时间窗口却很短。

而且它的工作量一点都不小。App Store Connect要求为不同机型上传对应尺寸的截图,iPhone要一套、iPad要一套,如果App支持横屏还得再准备一套横版。如果你的产品做了多语言,每多一种语言,素材量就翻一倍。更麻烦的是,截图里不能出现模拟器状态栏、不能包含测试数据、不能显示其他平台的UI元素、文案不能有“第一”“最便宜”这类极限词。人工做图的时候,这些细节全靠自觉,漏掉一个就可能在审核阶段被打回来。

预览视频的门槛更高。苹果建议的预览视频通常控制在15到30秒,要展示核心功能流程,需要有剪辑、有字幕、有合适的背景音乐,分辨率、帧率、编码方式都有讲究。独立开发团队很少会养一个专职视频剪辑,多数情况下是开发或者设计抽空用录屏工具快速剪一版,质量波动很大。

Goldie的思路,就是把“出截图”“出视频”“检查合规”这三件事合并成一条流水线。开发者在提交构建之前,跑一条命令,就能拿到全套素材和一份合规报告。这个切入点在我看来选得非常精准,因为App Store素材是有硬性规格标准的,非常适合自动化;而合规校验又是纯规则性的检查,天然适合做成静态扫描。它不是要替代设计师的创意,而是把重复劳动和规则检查接管过来,让真正需要人判断的事情留给人。

2. 核心能力拆解:三项关键功能到底怎么实现

2.1 自动化截图:从“模拟器截屏”到“理解界面后出图”

Goldie的自动化截图,核心不是“截屏”这个动作,而是“知道截什么、用什么文案截、输出什么尺寸”。

它接入的是模拟器里的UI测试框架和视图层级信息。启动模拟器后,Goldie会安装并启动你的App,通过可访问性API拿到当前页面的控件树,找到目标区域之后,再执行截图。这比传统的坐标点击可靠得多,哪怕控件位置因为不同机型略有偏移,只要控件的accessibilityIdentifier没有变,它就能精准定位。

文案替换也是关键能力。App Store截图通常要突出某些功能点或产品名,如果靠人工在模拟器里改数据再截图,效率很低。Goldie可以直接读工程里的Localizable.strings或者xcstrings文件,在运行时把对应的UILabel内容替换成目标文案,然后截屏。这意味着做多语言截图的时候,中文一套、英文一套,只需要配置好语言列表,剩下全部自动完成。

尺寸适配方面,我测试下来的经验是:Goldie采用先以最大尺寸渲染、再等比缩放输出的策略。这样做的好处是保证小尺寸截图里的文字清晰度和间距比例和大尺寸一致,不会出现“6.7英寸上排版正常、5.8英寸上文字被折行裁切”的情况。生成后的文件会带@3x、@2x后缀,并保持PNG格式,确保符合App Store Connect的上传要求。

2.2 预览视频:录屏只是最基础的一步

预览视频的难度比截图高一个量级。截图是一瞬间的事,视频则涉及时间轴、转场、字幕、音频编码这些维度。Goldie的做法是把整个过程拆成三个阶段。

第一阶段是素材录制。Agent会在模拟器里按预设的操作流执行一次完整的用户路径,比如进入首页、搜索商品、查看详情、加入购物车,这个过程同时用模拟器的录屏能力记录屏幕输出。第二阶段是自动剪辑,把录制好的源素材按操作节点切成多个场景,去掉点击光标和操作间隙,然后套用预设的转场效果。如果你在配置里指定了字幕,它还会根据每个场景的起止时间,把字幕文本以SRT格式渲染到对应时间轴上。

第三阶段是编码输出。这里有几个参数直接影响结果:编码器、分辨率、码率、帧率、时长。我实测下来,H.264是目前兼容性最好的选择,App Store平台支持最稳定;如果视频文件太大,可以换到H.265,体积能大概缩小一半,但要注意某些平台的兼容性要求。帧率建议按30fps处理,除非你的内容有明显的高速运动画面,否则60fps只是加大文件体积,观感提升有限。时长上,苹果官方建议预览视频在15到30秒之间,Goldie默认给到20秒,你可以按需调整。

视频“能用”和“好看”之间还是有差距的。Goldie的优势在于社区有人专门维护了一套设计模板,覆盖了常见的转场、字幕位置、背景音乐搭配,效果接近人工剪辑。对于大多数工具类、效率类App来说,这个质量已经足够应付审核和转化需求了。

2.3 内置合规校验:比“肉眼检查”更可靠的规则引擎

合规校验是Goldie最吸引我的部分,也是它在GitHub上被讨论最多的地方。它本质上是一个规则引擎,把苹果的审核要求拆解成可执行的静态检查项。

我用下来的体感是,检查项大体可以分成四个层次。第一层是硬性像素校验:截图的分辨率是否精确匹配目标机型要求,是否包含Alpha通道。第二层是内容边界校验:截图里有没有出现Android风格的元素、有没有出现模拟器的状态栏、有没有显示测试账号、有没有露出App内未发布的功能。第三层是文本敏感词校验:宣传语里是否包含“第一”“最便宜”“100%”这类容易被判违规的极限词,广告文案里是否有未经授权的第三方品牌信息。第四层是版本一致性校验:截图里的UI和当前构建版本是否一致,文案与App Store Connect里的应用描述是否冲突。

这四层检查跑完之后,Goldie会生成一份报告,每条问题对应到具体的截图文件或者视频时间点,标注出命中了哪条规则、风险等级是什么、建议怎么修改。坦白讲,苹果审核里有一部分是依赖上下文判断的,工具替代不了人工思考,但那些高频、低水平、规则明确的返工项,它确实能帮你提前拦下来。别小看这一点,很多团队被拒审的理由,翻来覆去就是那几种低级错误。

3. 一条命令跑通:从安装配置到合规报告出炉

3.1 环境准备:开始前需要装什么

先把环境准备好。Goldie目前主要面向macOS环境,因为要调用Xcode模拟器。你需要确保本机满足这几个条件:macOS较新版本、Xcode已安装并且模拟器运行时组件完整、有可用的开发证书或者至少能在模拟器里正常安装调试包。

安装方式我测试的是通过Homebrew安装的命令行版本,项目文档里也提供了npm安装方式,二选一即可。安装完成后先用版本命令确认可用:

brew install goldie goldie --version

接下来在项目根目录执行初始化命令。这个命令会用交互式问答的方式引导你生成一个基础配置文件,内容包括App名称、Bundle Identifier、工程workspace路径、项目scheme、目标模拟器等。如果你比较熟悉配置格式,也可以直接手写一个草稿再改。

提示:如果系统提示plist parsing error,通常是模拟器里旧版本的App没有卸载干净,或者Info.plist里有异常字段。先执行xcodebuild clean,再删掉模拟器里已安装的旧App,基本都能解决。

3.2 配置描述文件:告诉Goldie你的App长什么样

Goldie的运行依赖一个描述文件,里面定义了素材规格、界面路径和合规策略。下面是我整理的一份基础配置示例,字段不多,但每一项都直接影响输出结果:

app: name: MyStore bundle_id: com.example.mystore workspace: ./ios/MyStore.xcworkspace scheme: MyStore simulator: "iPhone 15 Pro" screenshots: - name: home_banner path: HomePage/Banner languages: [zh-Hans, en] devices: ["iPhone 15 Pro Max", "iPhone 15 Pro", "iPad Pro 12.9"] text_replace: product_name: "Goldie" videos: - name: onboarding_flow flow: [home, search, product, checkout] duration: 20 fps: 30 languages: [zh-Hans] compliance: strict: true custom_rules: - id: CUSTOM_001 description: "优惠券界面水印不计入截图内容" action: ignore

逐个说一下关键字段。screenshots下面的path是界面路由,不是文件路径,而是告诉Agent“你要进入首页Banner区域”这个逻辑位置。devices决定生成哪些机型的截图,建议iPhone、iPad各覆盖一个代表性尺寸,不必把所有历史机型都跑一遍。text_replace用于运行时替换文案,把模拟器里的产品名替换成你指定的营销词。videos下面的flow是一组有序界面节点,Agent会按这个顺序自动执行操作流,录制素材。

配置文件的编写没有太多玄学,核心逻辑是:界面节点命名越规范,Agent定位越准。如果你的项目里还没有给关键页面控件设置accessibilityIdentifier,建议补上,这不仅是Goldie能识别的关键,也是做UI测试的基本功。

3.3 执行生成流程:模拟器启动到出素材

配置完成后,在项目根目录运行:

goldie run --config app.goldie.yml

这条命令会按顺序做这些事情:启动指定模拟器、构建并安装App、按配置里的路由依次进入目标界面、替换文案、截取多尺寸图片、按视频配置录制操作流、合成预览视频、执行合规检查、输出全部产物和报告。整个过程会打印详细日志,能看到当前执行到哪一步、下一步要做什么。

我拿一个普通的电商类App做过测试,配置了5张截图和1段视频,包含中英双语,跑完大约用了8分钟。其中大头时间是模拟器启动和构建安装,真正截图和录制的耗时反而很短。相比之下,人工做同样的工作量,光设计布局调整和导出就可能需要两三个小时,效率差距非常明显。

生成后的目录结构大致是这样:

.goldie/output/ ├── screenshots/ │ ├── zh-Hans/ │ │ ├── home_banner_iPhone15ProMax.png │ │ ├── home_banner_iPhone15Pro.png │ │ └── home_banner_iPadPro12.9.png │ └── en/ ├── videos/ │ └── onboarding_flow_zh-Hans.m4v ├── report/ │ ├── compliance_report.html │ └── compliance_report.json

拿到这些产物之后,直接按机型对应关系传到App Store Connect对应的槽位里即可。如果你的团队有设计规范,也可以在生成后把图丢进设计工具里叠加品牌元素,但基础素材已经不会再占用开发时间了。

3.4 合规校验报告与CI接入

goldie run执行完之后会自动带上合规检查结果,也可以单独对历史素材跑一遍检查:

goldie check .goldie/output/screenshots .goldie/output/videos

报告会用列表形式标出每个问题的风险等级和修复建议。我把常见的检查结果整理成了一个速查表,方便对照:

检查项失败表现建议处理
分辨率精确匹配截图尺寸和目标机型不一致重新生成该机型截图
状态栏内容截图中出现模拟器时间、电量使用固定状态栏覆盖层
敏感文案宣传语命中极限词调整文案措辞
测试标识截图中出现TEST、测试账号替换运行时数据
编码合规视频编码或码率不达标调整视频编码参数后重新生成

如果公司内部有CI/CD流程,Goldie也提供了--ci参数,启用后不会进入交互式确认,所有结果直接输出为文件,方便当作构建产物归档。我们的做法是这样的:每周版本构建时自动跑一遍Goldie,生成的截图和视频直接上传到内部素材管理平台,合规报告随构建邮件发给相关同事。这样一来,素材生产不再依赖某个人的工作节奏,而是变成流水线里的一个标准环节。

注意:合规校验跑出来的结果是“建议”,不是“判决”。规则覆盖的是显性、可枚举的问题,像产品功能是否存在夸大宣传、截图是否误导用户这类依赖上下文判断的问题,还是要结合审核指南人工过一遍。工具的意义是把返工概率降到最低,不是替代最终审核判断。

4. 落地过程中遇到的问题与排查清单

4.1 模拟器安装失败:plist parsing error的正确处理姿势

我身边几个同事第一次跑Goldie都卡在了这一步:模拟器安装App时报错,提示plist parsing error。排查下来主要三方面原因:一是模拟器里残留了旧版本App,Info.plist配置有变化导致解析失败;二是工程的构建配置里Info.plist路径或内容有问题;三是模拟器本体的缓存异常。

处理顺序建议是这样的:先把模拟器里同名App彻底删除,再执行xcodebuild clean清理构建缓存,最后重启模拟器再跑一次。如果问题依旧,检查项目的Info.plist文件是否有非法字符或者重复Key。这个报错跟Goldie本身关系不大,属于基础环境问题,但因为它出现在第一次使用时,很影响体验,所以我把自己的排查流程放出来给大家参考。

4.2 模拟器截图和真机观感差异明显

另一个常见问题是,模拟器里的截图看起来正常,真机上显示却差一些。原因主要是字体渲染曲线、安全区域、灵动岛或刘海屏的遮挡差异。Goldie生成的截图以模拟器渲染为准,iPhone 15 Pro系列还好,老一点的机型在圆角和底部Home条区域的观感会不同。

我的习惯是:模拟器生成一遍作为基础素材,再拿一台真机跑一遍关键流程,重点比对一个核心流程页面的截图。如果差异只在状态栏或者圆角区域,直接在后期覆盖官方状态栏模板即可;如果布局本身有错位,说明界面适配没做好,这个时候就不只是素材问题,而是代码层面的适配工作还没完成。

4.3 视频生成后体积过大、上传被拒

视频审核被拒的原因里,“文件太大”是很典型的一种。App Store Connect对预览视频的大小虽然没有一个特别死板的数值,但越大的文件上传越容易出问题,而且用户下载展示页时加载也会变慢。

出现体积问题时,按这个优先级调整:先换编码器,H.265比H.264能省接近一半体积;再降码率,把视频码率控制在5到8Mbps,普通录屏内容这个区间画质损失几乎看不出来;最后检查时长,20秒以上的视频优先裁剪到15到20秒,把非核心流程剪掉,转换率反而更高。帧率如果不是特殊场景,30fps足够。

4.4 合规策略误报:如何用自定义规则处理

Goldie的规则引擎跑得比较严格,偶尔会误报。比如你有一部分截图是刻意展示某个内部运营活动页,活动背景里的装饰元素可能被识别成“其他平台UI元素”,就会被标记为高风险。

处理方式是在配置文件里增加custom_rules,把这类明确排除的场景写进去,标注action: ignore和说明原因。但这里要提醒一句:自定义规则一定要写清楚描述,别为了过检查把有问题的截图也豁免了。我们团队的规定是,自定义豁免必须经过另一个同事复核,并且在报告里留下备注,方便后续追溯。

4.5 多人协作和Agent版本锁定

Goldie这类工具在团队里推广时有一个容易被忽略的坑:配置漂移。不同同事本地安装的Goldie版本不一致,或者模拟器运行时版本不同,会导致生成素材细节上有微小差异。最后汇到一起时,截图风格不统一,看着很别扭。

解决办法是把配置文件.goldie/目录纳入版本管理,同时在CI流水线里固定Agent版本号,不要让它在构建时随机拉最新版。模拟器运行时也尽量固定一个版本。这个小细节看起来不起眼,但对素材一致性的影响非常大。

还有一个建议:把自己历史上被拒审过的截图归类整理成测试样本,每次升级Goldie规则库之后跑一遍回归,看新增规则是否真的覆盖了之前翻车的点。这套做法能确保工具的价值是持续累加的,而不是一次性适配。

用了一段时间Goldie,我最大的体感变化是:以前每周发版前夜都在反复改截图尺寸、担心截图审核,现在这部分时间基本省下来,变成了真正跑业务回归测试的时间。工具当然不能保证百分之百过审,但它把那些低水平、高频、可修复的合规问题挡在了提交之前,这件事本身就是很大的价值。如果你也在维护一个需要频繁发版、多语言、多机型的App,我建议按我上面说的路径,先拿一个不重要的版本或者历史包跑一遍,感受一下“Agent自动出素材+自动查合规”的工作流。配置一次,以后每周都能省出几个小时,甚至半天。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询