
GitHub Trending 上这个叫 Goldie 的项目最近在 iOS 开发者圈子里讨论度相当高。从标题看——编码Agent自动化生成 App Store 截图与预览视频内置苹果上架合规校验——我第一反应是又来了个蹭 AI 热度的玩具。但把它拉下来实际跑了一遍之后我确实改主意了。这篇文章是我从零开始跑通 Goldie 全流程的复盘记录。不聊虚的直接讲它到底怎么工作、配置文件里每一项是什么含义、生成出来的素材长什么样以及我在实操中踩到的一堆看文档根本发现不了的坑。无论你是独立开发者还是团队里专门负责上架的工程师这份记录应该能帮你省下至少一个下午的折腾时间。1. Goldie 到底是谁一个编码 Agent 盯上的上架素材苦力活1.1 上架素材的门槛被严重低估了很多人以为 App Store 上架截图和预览视频只是顺手拍几张图、录个屏的事。真做过的人才知道这活儿有多烦。苹果对截图规格的要求细得让人头疼iPhone 6.7 英寸要 1290x27966.5 英寸要 1242x26885.5 英寸要 1242x2208iPad 12.9 英寸要 2048x2732。如果你的 App 同时要适配多种设备、多语言、深浅色模式那截图的张数不是几张而是几十上百张。更别说预览视频苹果要求 15 到 30 秒指定编码格式和分辨率还得真实展示 App 的功能不能是单纯的幻灯片。我见过不少团队上架前一周才发现截图尺寸不对、某个机型的图缺失、预览视频超过 30 秒被判不符合规范然后整个版本被卡在审核阶段。这类问题本身没有技术难度但极其消耗精力。Goldie 盯上的恰恰就是这个技术含量不高但绝不能出错的苦力环节。1.2 Fastlane 为什么没完全解决Goldie 的机会在哪老牌自动化方案 Fastlane 其实已经解决了一部分问题。它的 snapshot 功能可以通过 XCUITest 在模拟器里自动截图配合 frames 甚至能套上设备外壳。但用过的人都知道它有几个痛点一直没解决。第一配置成本高。你要写 XCUITest 代码要维护多个 target 和 scheme还要处理模拟器状态栏、权限弹窗这类琐碎问题。第二截图产出后依然需要大量人工检查不同设备尺寸是否齐全、状态栏时间是否统一、内容是否露出敏感信息全靠肉眼。第三预览视频这块 Fastlane 基本没有像样的内置方案还是要靠人工录屏、剪辑、压制。Goldie 的思路不一样。它不是一个执行截图的命令行工具而是一个编码 Agent。简单说传统工具是你告诉它怎么干它按部就班执行Goldie 是你告诉它要什么结果它自己拆解任务、调用工具、检查产物、修正错误。这个差异在遇到上架素材这种多步骤、多约束、需要自我检查的任务时优势特别明显。1.3 编码 Agent 的定位把执行命令变成理解任务Goldie 核心工作流大致可以拆成四段理解需求、执行计划、检查产物、迭代修正。你给它一个 App 路径和一组目标设备它会自己决定先启动哪个模拟器、用什么方式截取 UI、如何处理状态栏和深色模式、怎么把多段录屏拼成预览视频、最后跑一遍合规规则库。这种模式天然适合上架素材准备因为任务边界清晰但细节极多。它不需要像人一样有创意却要对所有规格细节记得滴水不漏。苹果的审核指南、截图尺寸表、视频编码参数这些恰恰是 Agent 最擅长记忆和执行的。2. 三个核心能力拆解截图、视频、合规校验的落地逻辑2.1 自动截图它怎么在不同设备上完成精准卡位Goldie 的截图能力本质上不是它自己发明的而是把 XCUITest、simctl 和状态栏处理这些底层能力封装成了可编排的流程。关键在于精准二字。它拿到你配置的设备列表后会依次做这几件事启动对应尺寸的模拟器安装 App切换到你指定的深色或浅色模式然后通过 XCUITest 驱动 App 进入你预先定义好的页面。这里有个容易忽略的细节——截图到底在哪一瞬间按下Goldie 采用了类似页面稳定检测的机制会等到列表数据加载完成、图片渲染结束、动画停止之后才按快门。如果你手动截图经常会拍到加载中的半成品它这个检测逻辑能避开大部分翻车现场。状态栏处理也是重点。苹果官方要求截图里的状态栏时间最好是 9:41经典宣传时间运营商标识也要一致。Goldie 会在截图前通过模拟器状态栏覆盖脚本统一调整时间和运营商甚至把电池电量调到特定值。这个细节直接决定截图是否像官方出品。还有一个容易踩的坑是权限弹窗。App 第一次启动往往会弹出定位、通知、相机权限如果截图时正好撞上弹窗素材基本作废。Goldie 的思路是先用预置的权限配置如 simctl privacy grant提前授予所有权限再进入 UI 截取流程所以最终产出的截图里不会出现系统弹窗。从最终格式来看Goldie 输出的截图文件会严格按照 App Store Connect 要求的尺寸和命名规则整理。以下是它默认支持的几类主流规格设备类型屏幕尺寸截图分辨率适用机型示例iPhone 6.7 英寸6.7 英寸1290x2796iPhone 15 Pro Max、14 Pro MaxiPhone 6.5 英寸6.5 英寸1242x2688iPhone 11 Pro Max、XS MaxiPhone 5.5 英寸5.5 英寸1242x2208iPhone 8 Plus、7 PlusiPad 12.9 英寸12.9 英寸2048x2732iPad Pro 12.9 英寸iPad 13 英寸13 英寸2064x2752iPad Pro 13 英寸M42.2 预览视频合成15 到 30 秒背后的编码参数预览视频是另一个重头戏。苹果允许的 App Preview 并不是随便录一段屏幕操作就完事它的限制比大多数人以为的要严格。首先是格式。苹果要求预览视频必须是 H.264 或 ProRes 422 HQ帧率可以是 30fps 或 60fps分辨率要匹配指定设备。其次是时长范围在 15 到 30 秒之间超过 30 秒直接判不合格。还有一个隐藏要求视频内容必须来自实时运行的 App不能用静态图片轮播冒充也不能包含第三方品牌、敏感内容或未经授权的素材。Goldie 生成预览视频的流程大致是这样先选取你指定的旗舰设备比如 6.5 英寸 iPhone然后驱动模拟器按脚本自动执行一段真实操作流程同时录制屏幕。这个操作流程你可以通过配置定义比如打开首页-进入详情页-点击购买-完成支付Goldie 会在真实 UI 上执行保证画面里的交互是真实的。录到原始素材后它会进入合成阶段。合成不是简单的拼接而是支持转场、字幕、背景音乐的编排。比如前 5 秒展示首页中间 10 秒展示核心功能最后 5 秒收尾到品牌画面。转场方式和字幕位置都可以在配置里调整。最后再用 FFmpeg 或者 AVFoundation 做编码压制确保输出参数完全符合 App Store Connect 的预期。这里有一个很多教程不会提的细节预览视频的尺寸不一定要和截图完全一致。比如 iPhone 6.5 英寸对应的预览视频是 1080x1920 或 886x1920这取决于你是竖屏还是横屏拍摄。Goldie 在处理时会在配置里区分 screenshotSize 和 previewSize避免把截图尺寸直接套到视频上导致审核被拒。2.3 上架合规校验内置的苹果审核规则库如何工作合规校验是 Goldie 最有差异化的亮点也是它宣传里最吸引我的部分。所谓内置苹果上架合规校验本质上是把 App Store 审核指南中与元数据、视觉素材相关的规则转化成了可自动检查的规则集。我整理了一下它主要从四个维度做检查。第一个是格式合规。检查每一张截图的分辨率、文件格式、命名是否符合要求检查视频的编码、时长、分辨率、有无声音轨道异常。这类检查完全靠规则即可完成准确率接近 100%。第二个是内容合规。它会用图像识别能力分析截图里是否包含用户隐私信息、是否出现类似安卓系统的界面元素、是否包含第三方 Logo、是否有明显违规的医疗或金融营销话术。比如如果你的截图里出现了另一个 App 的水印它能标出来。这个维度部分依赖视觉模型所以不是百分之百准确但能过滤掉大部分低级错误。第三个是文本合规。它会提取截图和视频字幕中的文案和苹果审核指南里列出的敏感词、夸大宣传词比如第一最根治这类绝对化用语做比对。对于出海 App 来说这个功能尤其有用因为它还能检查多语言环境下是否正确使用了当地语言的合规表述。第四个是完整性检查。它会对照你配置的目标设备列表逐一检查是否每个机型、每个语言、每种深色浅色模式都有对应素材防止漏图。这个检查对大型团队特别省心因为人工漏掉一张屏往往要等上架被拒才能发现而它在生成阶段就堵住了。合规校验跑完会输出一份报告按通过 / 警告 / 不通过分类列出问题。警告项通常是可以人工判断的内容合规问题不通过项则直接告诉你哪个文件、哪一行配置导致失败。3. 实操全记录从空目录到生成第一套上架素材3.1 环境准备这些依赖装齐了才不闹心先说结论Goldie 对环境的要求并不低毕竟它要控制模拟器、运行 XCUITest、搞视频编码这一套东西天然绑定了 macOS。我实测下来至少需要以下环境依赖版本/类型说明macOS13 及以上模拟器和 Xcode 工具链必需Xcode15 及以上包含模拟器、simctl 等运行环境Command Line Tools最新版编译和部分脚本依赖Node.js18 及以上Goldie 本体基于 Node 实现FFmpeg支持 H.264 的版本预览视频编码压制核心Python 33.9 及以上部分视觉校验脚本依赖安装过程不算复杂。如果你用 Homebrew可以先用 brew install ffmpeg 把视频处理工具链装好然后通过 npm 全局安装 Goldie 的命令行工具。我在一台 M1 MacBook Air 上操作安装过程大概十分钟主要耗时在 FFmpeg 的依赖编译上。需要提前说明的是这个工具只支持真机调试签名完备的 App 或者模拟器可运行的 Debug 包。如果你的项目现在连模拟器都跑不起来那 Goldie 也无能为力先把工程问题解决再碰它。3.2 核心配置与首次运行Goldie 的配置走的是 YAML 文件整体结构比较直观。我把我实际用到的配置简化后贴出来app: name: MyDemoApp bundleId: com.example.demoweapp scheme: MyDemoApp path: ./build/Debug-iphonesimulator/MyDemoApp.app output: dir: ./release_assets screenshotDir: screenshots videoDir: previews targets: devices: - name: iPhone 6.7 screenshotSize: [1290, 2796] - name: iPhone 6.5 screenshotSize: [1242, 2688] - name: iPad 12.9 screenshotSize: [2048, 2732] languages: - zh-Hans - en-US colorSchemes: - light - dark previewVideo: enabled: true path: preview_config.json encoding: h264 fps: 30 durationRange: [15, 30] compliance: enabled: true level: warn # off / warn / blocked outputReport: trueapp 段里最关键的是 path 和 scheme它们决定了 Goldie 怎么定位并启动你的 App。devices 段可以声明多种设备我建议先按苹果目前主推的 6.7 英寸和 6.5 英寸来不要一口气配太多设备否则首次跑会很慢。previewVideo 段里的 path 指向一个独立的 JSON 文件里面是预览视频的脚本编排。我在这个文件里定义了启动 App 后依次点击的坐标、滑动延时的毫秒数以及加字幕的位置。durationRange 是硬性边界Goldie 导出前会自动检测超出 30 秒会直接报错。compliance 的 level 我建议一开始设为 warn不要用 blocked。不然某个小问题就会中断整个流程干扰你对工具的整体感知。等你看过几份报告、人工确认没问题之后再调成 blocked 也不迟。配置好之后运行也很简单goldie run --config goldie.yml首次跑会经历下载匹配模拟器运行时-创建模拟器-安装 App-启动并截图-录制视频-合规校验这一串流程。我的 1.5 倍速实测中两个 iPhone 设备加一个 iPad中英双语、深浅色各一套总耗时在 15 分钟左右。如果只跑一台设备一个语言基本 5 分钟以内能出结果。3.3 实测结果截图长啥样合规报告说了啥运行结束后输出目录的结构大概是这样的release_assets/ ├── screenshots/ │ ├── iPhone6.7/light/zh-Hans/01_home.png │ ├── iPhone6.7/light/zh-Hans/02_detail.png │ ├── iPhone6.7/dark/zh-Hans/01_home.png │ ├── iPhone6.5/light/zh-Hans/01_home.png │ └── iPad12.9/light/zh-Hans/01_home.png ├── previews/ │ └── MyDemoApp_preview_h264_30fps.mp4 └── compliance_report.json我特意检查了截图状态栏时间统一是 9:41运营商标识也一致。深色模式下的截图确实按系统设置切换了背景色不是简单地给浅色图套个滤镜。这些细节如果让我手动处理至少要折腾一两天。合规报告是 JSON 格式里面会列出每条检查项的结论。我的测试项目里它捕捉到一个警告企业首页截图底部露出了一张第三方授权图片的水印。这个位置我人工审的时候根本没注意到它一眼就捞出来了。另一个警告是中文文案里出现了极致体验这种绝对化宣传词属于 App Store 常见的审核敏感表述。这两条都算是实实在在的提醒不是凑数用的假检查项。4. 避坑清单我在实操中真实翻过的车4.1 截图黑屏与权限弹窗开场最痛的坑我第一次跑 Goldie截图生成阶段直接翻车输出文件里 80% 是黑屏。排查半天发现不是工具 bug而是 App 启动后先进入了加载页数据还没回来就触发了截图。虽然前面说了 Goldie 有页面稳定检测但它的检测逻辑默认只判断主线程是否空闲如果你的加载是异步网络请求它可能误判为稳定了。解决办法是在配置里给关键页面增加一个 screenshotDelay 参数人为加 1.5 到 2 秒的缓冲。另外一个更通用的方案是给 App 里预先埋一个 UI 测试专用的加载完成标识比如 Accessibility IdentifierGoldie 能通过它识别内容真的准备好了。权限弹窗的问题则是另一条路线。虽然不是每次都会碰到但一旦碰到截图里的弹窗就会毁掉整张素材。我试过一次在未授予通知权限的情况下启动 App截图就完美捕获了系统弹窗。后来我用 simctl privacy grant 命令提前把所有权限授予模拟器这个问题就再没出现过。4.2 视频导出与上传编码、时长、plist 那几个老问题预览视频生成阶段我遇到的最大坑是编码参数。第一版导出的视频用系统播放器看完全正常但拿到 App Store Connect 上传时就报格式错误报错指向视频的 profile 不符合 H.264 的 High Profile 要求。后来我查了 FFmpeg 的日志发现 Goldie 默认输出的是 main profile而苹果后台更建议 High Profile。解决办法是在 previewVideo 配置里显式声明 profile 为 high并设置 gop size 不超过帧率的两倍。这个细节文档里没写清楚我也是翻源码才发现的。还有一个老生常谈的坑是 macOS 环境相关的配置解析错误。如果你的机器上同时装过多个 Xcode 版本plist 解析偶尔会报类似 parsing error 的提示。这类问题通常和 Goldie 无关而是 xcode-select 指向错了目录。遇到后先跑一下 xcode-select -p 检查当前激活的 Xcode 路径把路径切到正确版本基本都能解决。时长也是个大坑。我设置过一次脚本流程比较复杂录屏素材本身就接近 35 秒结果导出阶段直接被合规校验拦截提示 duration exceeds maximum。别想着靠剪辑软件后期裁一刀遇到这种情况直接在编排脚本里缩短操作步骤或者加快滑动节奏让它天然落在 28 秒左右最稳妥给审核留点余量。4.3 合规校验的误报与漏报机器不是万能的我必须强调一个观点合规校验是辅助不是救命稻草。实测中Goldie 的规则类检查非常可靠比如分辨率、编码、时长、文件命名这些是硬性标准基本不会误判。但视觉识别类检查偶尔会误报。比如我有一张截图背景里有品牌渐变色块它误标成了疑似第三方 Logo。这类警告你人工确认一下即可不影响整体使用。反过来漏报情况也存在。如果你的截图里包含一段只有人工才能判断是否违反审核条款的文案比如某个医疗类表述是否构成误导视觉模型很难给出准确结论。所以我实际的流程是Goldie 负责把低级错误全部捞干净我在上传前依然会人工过一遍视觉素材。它的价值不是替代审核专家而是让我从逐张检查 100 张图减少到只看它标记的 5 张图。4.4 这套工具适合谁、不适合谁跑了一轮之后我给 Goldie 的定位是上架素材流水线里的质检员和操作工适合那些素材产出量大、重复度高的场景。独立开发者如果只有一台 Mac 和一个简单 AppGoldie 完全够用。尤其适合需要定期更新截图的多版本迭代场景每次发版前统一重新生成一套素材避免截图里还是三个月前的旧界面。团队场景更推荐把它接入 CI 流程每天自动跑一次一旦界面有改动就重新生成截图和合规报告省掉大批人工沟通成本。但如果你想在截图里做高度定制化的创意设计比如手绘插画、复杂排版、带有强烈品牌风格的营销海报Goldie 默认的真实 UI 截图路线不太适合。它不是设计工具不负责创造视觉惊喜只负责把最规整、最不出错的素材批量交给你。我在实际使用中还有一个感受工具类项目最怕的不是功能少而是功能多到不知道怎么用。Goldie 的定位非常聚焦就是解决上架素材的标准化、批量化、合规化问题没有像一些 AI 项目那样恨不得把自动生成整个 App都塞进来。也正是这种克制让它真正把一条流程做深了。最后分享一个小技巧跑完 Goldie 之后不建议直接拿生成视频到 App Store Connect 上传先在本地把 MP4 的编码信息用 ffprobe 验证一遍确认 profile、分辨率、时长三项没问题再走上传流程。这个习惯能帮你避开不少本地能播但后台拒绝的玄学问题实测下来比盯着后台错误提示猜原因高效得多。