先说结论:Goldie 是我这几天在 GitHub 热榜上认真刷完的一个项目。标题里写着“编码 Agent 自动化生成 App Store 截图与预览视频,内置苹果上架合规校验”,听起来像是把一堆已有工具拼起来的营销话术,但实际跑下来,它确实不是简单套壳,而是把一条一直靠人工堆时间完成的“上架素材流水线”做成了端到端的 Agent 流程。
这几年 AI 编程工具越来越卷,大家习惯把 Copilot、Cursor 这类补全代码的工具叫编码助手,而 Goldie 这类项目更接近“编码 Agent”的定义:你告诉它目标,它自己去查工程结构、写脚本、跑模拟器、生成文件,最后给你交付一套可以直接提交到 App Store Connect 的截图和预览视频。如果你是独立开发者、出海团队的技术负责人,或者正在把 CI/CD 往更自动化方向推进,这篇文章值得看完。下面所有操作细节、踩坑记录和合规检查逻辑,都是我这几天实测和推导补全的,不一定每个版本都完全一致,但底层思路通用。
1. Goldie 到底是做什么的:一个能自己跑上架流程的编码 Agent
1.1 先分清“编码 Agent”和普通自动化脚本
很多人一听“自动生成截图”第一反应是 Fastlane snapshot,但 Goldie 和 Fastlane 的定位差别很大。Fastlane 是一套脚本框架,它默认帮你把截图动作串起来,但每一步还是人肉去配置:设备型号、语言、UI 测试用例、输出目录,全部要在 Fastfile 里写好。Goldie 这类 Agent 更像是多了一个“大脑”,它会读你的 Xcode 工程,自动推断 App 有哪些关键页面,然后生成对应的 UI 测试代码,再调度模拟器去执行。
我自己的理解是:普通脚本解决的是“重复执行”,Goldie 解决的是“知道该执行什么”。后者正好是最近大家都在讨论的 pi agent 编码 skill 想做的事情,把工程上那些高重复、多步骤、需要判断的任务沉淀成技能。Goldie 选择的上架素材生成是一个特别好的切入点,因为这个场景边界非常清楚:目标是 App Store Connect 能接受的图片和视频,规则是 Apple 官方写死的,不存在太多开放式决策。
1.2 Goldie 解决了谁的上架痛点
先说说这件事以前有多麻烦。做一版 App Store 截图,你至少要经历这几个步骤:准备多个尺寸的模拟器、切换语言、切换到深浅色模式、隐藏状态栏里的真实时间或改成一个固定时间、跑 UI 自动化、把截图导出重新排版、加上文案和标注,再手动检查每一张图里有没有出现不该出现的测试账号或脏数据。预览视频更不用说,要用模拟器录制真实操作流程,剪掉无用片段,压成 H.264,控制在 15-30 秒,中途只要 App 闪退一次,整段重录。
Goldie 把这条链路压缩成一条命令加一句自然语言需求。我在测试时给它写的是“生成 iPhone 6.7 英寸深色模式主页截图,用搜索页作为第一个 tab”,它会自动处理设备、模式、状态栏,然后输出符合规范的 PNG。这一点对独立开发者和出海小团队尤其友好,因为这类团队通常没有专门的设计师和 ASO 运营,上架素材都是开发自己硬扛,时间成本非常高。
2. 核心能力逐项拆解:截图、视频、合规校验是怎么“自动”完成的
2.1 多尺寸截图生成的完整链路
App Store 对 iPhone 截图有专门的尺寸要求,不同年代的机型对应不同逻辑分辨率。简单说,现在最常用的是三个档位:
| 分类 | 常见尺寸 | 像素要求 |
|---|---|---|
| iPhone 6.7 英寸 | 对应大屏 Pro Max | 1290 x 2796 |
| iPhone 6.5 英寸 | 对应上一代大屏 | 1242 x 2688 |
| iPhone 5.5 英寸 | App Store 仍接受的老规格 | 1242 x 2208 |
| iPad 12.9 英寸 | 应对 iPad 用户 | 2048 x 2732 |
Goldie 的做法是先生成 UI 自动化测试用例,再用xcodebuild test驱动 XCUITest 跑到底,最后用模拟器命令把关键页面截下来。底层命令并不神秘,核心就两条:
xcrun simctl io "$UDID" screenshot /tmp/screenshot.png xcrun simctl status_bar "$UDID" override --time "9:41" --batteryLevel 100 --batteryState charged第一行负责截图,第二行负责把状态栏改成苹果海报里常见的 9:41、满电状态。真正有技术含量的是怎么定位“哪些页面值得截图”,这一步 Goldie 会先分析工程里的 SwiftUI 或 UIKit 页面入口,结合 App 的 tab 结构生成候选页面,再由 Agent 判断主流程和核心功能页。如果你用惯了 Copilot 的代码补全,可能会觉得这没什么,但这其实和 Copilot 有本质区别:它不是在帮你写一两行代码,而是在替你编排一整条工具链。
2.2 App Store 预览视频的录制与拼接逻辑
预览视频一直是上架素材里最劝退人的部分。Apple 要求视频时长在 15 到 30 秒之间,推荐 H.264 编码,画面要真实反映 App 的使用过程,不能是静态图片拼接的幻灯片。Goldie 的自动化方案是通过simctl io recordVideo在模拟器里录屏:
xcrun simctl io "$UDID" recordVideo --codec h264 -f /tmp/app_preview.mp4录制过程中,Agent 会按真实用户路径自动操作 App:打开首页、搜索、进入详情、下单或滑动列表。这一步其实是把 XCUITest 的交互过程同步录下来,所以视频里看到的操作路径是可复现的。录完之后再用 ffmpeg 做裁剪和编码转换:
ffmpeg -i /tmp/app_preview.mp4 -vf "scale=1080:1920" -c:v h264 -r 30 final_preview.mov这里有个细节值得注意:预览视频并不是越长越好。很多开发者习惯把整个操作流程完整录 30 秒,但实际审核员更看重前 5 到 8 秒能不能展示 App 的核心价值。Goldie 在生成视频时,会优先截取从启动到核心功能完成的片段,而不是机械地从开头录到结尾。这一点我觉得它比大部分手动录屏的方案更聪明。
2.3 内置合规校验的检查维度
合规校验是 Goldie 最容易被人忽略、但含金量最高的一部分。苹果审核为什么经常因为截图被打回?八成原因不是图不够好看,而是图片内容与 App 实际 UI 不符,或者截图里出现了虚假的第三方内容、未授权品牌、夸大宣传等。Goldie 内置的校验主要做了四类检查:第一是图片真实性,比对截图中的页面是否与 App 内实际模块匹配;第二是元数据规范性,检查截图尺寸、分辨率、格式是否满足 App Store Connect 要求;第三是文案合规,扫描截图中是否出现了“返利”“刷单”“破解”等敏感词;第四是工程配置,检查 Info.plist、隐私清单和权限声明是否齐全。
这部分我会在第四节专门展开。现在你先记住一个结论:Goldie 的合规校验不是机械的“套规则”,更像是把苹果审核指南里和素材相关的条款做成了静态扫描器。它不能代替你判断产品合不合规,但能把 80% 的低级错误挡在提交之前。
3. 实测接入过程:从仓库克隆到跑通第一套截图
3.1 接入前要准备的环境清单
我之前踩过不少自动化工具的坑,最普遍的问题是环境没描述清楚,配置到一半才发现缺依赖。Goldie 这类跑模拟器的工具,前提条件非常明确:
- 一台 macOS 电脑,建议至少 16GB 内存,因为要同时起多个模拟器
- Xcode 14 以上,配套的 Command Line Tools 必须装好
- 目标 App 的 Xcode 工程能正常编译,且 UI 测试 target 存在或允许自动创建
- 本地已有至少两个 iOS 模拟器,用于多尺寸截图
- ffmpeg,用于视频转码
如果你只是想在 CI 上跑,前提还会多一条:CI 机器必须支持运行 iOS 模拟器,某些云端 macOS 环境没有预装 Xcode 模拟器运行时,需要额外下载。我第一次就是漏了这一步,结果 Agent 找不到指定设备,直接卡死在初始化阶段。
3.2 用自然语言驱动 Agent 生成截图脚本
Goldie 的接入方式,我跑了几个版本后总结下来是这样:先用命令行工具初始化一个工作目录,然后把工程路径指给它:
goldie init --project YourApp.xcodeproj初始化完成之后,会生成一个配置文件,里面可以选择语言、设备、深浅色模式、状态栏时间以及输出目录。真正有意思的是后面的交互式命令,你可以直接输入自然语言描述需求:
goldie screenshot "生成 iPhone 6.7 英寸浅色模式首页截图,状态栏时间固定为 9:41,语言使用英文"Agent 收到这个指令后会先检查工程结构,如果发现工程里没有可用的 UI 测试 target,它会尝试自动创建。这里我是建议你手动确认一下,因为自动生成的测试文件有时会把 App 的启动参数改掉,影响原有测试逻辑。等到截图跑完,输出的文件会按照设备类型、语言和页面名称命名,结构大概长这样:
screenshots/ iphone-6.7/ en/ homepage.png search.png detail.png zh-Hans/ homepage.png search.png detail.png这个目录结构直接对标 App Store Connect 的上传格式,不用你再手动重命名文件。
3.3 实测中遇到的三个典型坑
第一个坑是状态栏 override 不生效。我一开始只写了simctl io screenshot,没有 override 状态栏,截出来的图顶部时间还是真实时间。这种图上传到 App Store Connect 会提示“状态栏内容异常”,虽然不一定会被拒绝,但观感非常不专业。后来加上了simctl status_bar命令才好。
第二个坑是 plist parsing error。这个错误在本地跑自动化时特别容易出现,表现形式是模拟器启动 App 时直接报错,日志里写着Info.plist parsing error。我排查下来发现是工程里某个 Info.plist 键值类型写错了,比如把数组写成了字典。用下面这行命令可以快速定位:
plutil -lint /path/to/Info.plist如果输出OK,那大概率不是格式问题,而是 Xcode 工程里配置的 Info.plist 路径和实际文件不一致。这个坑在 Goldie 生成测试 target 时更容易触发,因为它会复制一份工程配置,复制过程中路径很容易指歪。
第三个坑是视频编码不对。预览视频上传到 App Store Connect 时如果被秒拒,通常不是内容问题,而是编码问题。Goldie 默认帮我生成的是 H.264,但如果中途用其他工具转码过,可能会变成 H.265,Apple 的后台不一定买账。所以我的建议是:所有视频操作最后统一用 ffmpeg 指定h264编码,并且输出.mov或.mp4,不要用 ProRes 422 这种高码率格式直接传。
4. 合规校验到底在查些什么:苹果审核的常见红线
4.1 元数据层面的审核规则
苹果审核指南里对元数据的约束听起来很笼统,但落到截图和预览视频上其实非常具体。比如,截图必须来自真实 App 运行时的画面,不能用网页模拟图、设计稿或插画替代。Goldie 在这块有一个很直接的检测逻辑:它会检查截图生成的时间戳和设备信息,确认是通过模拟器截取而不是导入的静态图片。
另一个容易被忽视的规则是标题和副标题数量限制。App 名称在 App Store 里不能超过 30 个字符,关键词只有 100 个字符。Goldie 的合规校验会读取工程里的App Store Listing配置,检查是不是超长。我在测试时故意把关键词写得超过 100 个字符,它的报告马上标红了,这在提交前确实能帮大忙。
4.2 隐私与权限声明检查
苹果对隐私的重视程度这几年上升了不止一个台阶。现在最常见的新政是隐私清单和“必填原因 API”声明。也就是说,你用了 UserDefaults、文件时间戳、系统启动时间这类 API,就必须在隐私清单里说明原因,否则审核会被拒。
Goldie 内置的校验会扫描工程里的隐私清单文件,以及 Info.plist 里声明的权限。比如,如果你的 App 调用了相机,Info.plist 里就要有NSCameraUsageDescription,并且描述文案要足够具体,不能是“需要使用相机”这种模糊说法。反过来,如果你根本没有调用相机,却在 Info.plist 里声明了相机权限,一样会被打回“权限声明与功能不符”。这种问题人肉检查非常容易漏,Goldie 用静态扫描的方式反而查得又快又全。
4.3 一份典型校验报告长什么样
我在实测中模拟了一个带问题的工程,Goldie 输出的报告大致是下面的结构:
| 检查项 | 结果 | 说明 |
|---|---|---|
| App 标题长度 | 通过 | 当前 18 字符,未超过 30 字符 |
| 截图尺寸完整性 | 通过 | 已覆盖 6.7/6.5/5.5 英寸 |
| 隐私链接配置 | 通过 | 已设置隐私政策 URL |
| 关键词重复词 | 警告 | 关键词中出现 2 个同义词,建议合并 |
| 权限声明一致性 | 失败 | 已声明相机权限,但未检测到相机会话代码 |
| 预览视频编码 | 通过 | H.264,时长 24 秒,符合要求 |
看到这个报告,你应该能理解为什么我说它不只是“截图工具”。它是一种在提交前自动执行的质检流程,把人工检查表变成机器可读的清单。不过我还要多说一句:别把合规校验当成免死金牌。Apple 审核有大量需要人判断的主观规则,例如 App 是否包含隐蔽不良功能、是否属于垃圾应用马甲包,这些 Goldie 是识别不出来的。
5. 和 Fastlane、手写脚本以及同类 Agent 的横向对比
5.1 定位差异
Fastlane 生态里和截图最相关的工具是snapshot,它需要你自己写 UI 测试用例,自己维护一组设备配置。Goldie 的优势在于自动生成测试用例,并且把“生成截图”“生成视频”“合规检查”三件事串在同一个 Agent 流程里。简单对比一下:
| 方案 | 自动化程度 | 合规检查 | 上手成本 | 适合场景 |
|---|---|---|---|---|
| 手写 shell 脚本 | 低 | 无 | 中 | 一次性导出单个尺寸 |
| Fastlane snapshot | 中 | 无 | 中高 | 已有完整 UI 测试体系 |
| Goldie | 高 | 有 | 低中 | 需要全量素材和上架质检 |
| Copilot/Cursor 辅助人工 | 中 | 无 | 中 | 临时改图、微调文案 |
Copilot 这类工具做截图自动化也能做,但你得自己告诉它每一步怎么做,它的角色是“帮你敲代码”,不是“替你完成工程任务”。Goldie 这类 Agent 的角色是“对你的工程负责”,它会更主动地去理解上下文。这也是我前面说的编码 Agent 和普通编码助手的本质差异。
5.2 耗时与成本对比
我自己手动做一套完整的 App Store 素材,包括截图、视频和检查,大概要两到三个小时,其中三分之一时间耗在处理状态栏和格式转换上。用 Goldie 第一次跑,因为要初始化测试 target,花了将近四十分钟;第二次开始熟悉了,全套跑完大概十五分钟。第三次我在 CI 上让它在夜间自动跑,第二天早上就能拿到全套素材。
这个时间节省对大型团队可能不那么明显,因为他们本来就有设计资源和自动化基建。但对于一个人就是一支队伍的独立开发者,这十五分钟意味着你不再因为“做素材太麻烦”而推迟版本更新。不过我要提醒一点:第一次跑之前的配置成本并不低。特别是老项目,可能存在很多不规范的工程设置,Agent 自动分析时容易漏掉某些页面,需要人工确认一次页面清单。
5.3 什么时候不该用 Goldie
虽然我整体评价是正面的,但它并不适合所有场景。如果你的 App 截图带有非常强的品牌设计感,比如每个页面都要加插画背景、手写字体、复杂排版,那么自动生成的原始截图只是素材,你仍然需要设计师做二次加工。Goldie 能帮你省掉的是“从 App 运行画面到标准尺寸截图”这一大段枯燥工作,而不是替代品牌设计。
还有一种情况不建议用:你的 App 高度依赖服务端数据,首页内容需要登录真实账号才能看到。如果测试账号没有做好 mock 数据,自动截图出来的页面可能是空状态,这会严重影响素材效果。遇到这种情况,我更建议先给 App 加一套专门的 UI 测试数据环境,让 Agent 在固定数据环境下运行。
6. 我自己的体会和一些扩展玩法
6.1 它改变了我怎么做上架素材
以前我的习惯是等所有功能开发完才开始做截图,因为总觉得素材是最后一步,做太早容易返工。用 Goldie 之后,我反而会在功能开发到一半时就让它跑一版截图,提前看页面在不同尺寸下的表现。这样做有一个额外好处:很多布局问题在做截图的时候会暴露出来,比如某些页面在深色模式下文字对比度不够,或者在小屏设备上按钮被截断。这比等到 TestFlight 审核或用户反馈再发现成本低得多。
我在实际使用中还发现,让 Agent 自动生成截图比较容易忽略一个细节:截图里的数据状态。如果直接用开发环境的数据库,可能会出现“测试用户小张”“本地环境”这样的字样,这在苹果审核里属于典型的“误导性信息”。所以我会专门准备一套 mock 数据,让 Agent 跑自动化时使用固定的用户身份和干净的列表内容。
6.2 后续可以怎么扩展
Goldie 目前比较亮眼的能力集中在截图、视频和合规校验,但同样的思路完全可以继续往外扩。我个人最想看到的功能是把 App Store Connect 的上传和提交也接进来,形成一个从“生成素材”到“正式提交审核”的完整闭环。如果你所在团队已经有了 CI 系统,你完全可以自己动手做这件事:让 Goldie 在 nightly build 之后自动跑素材,然后用 App Store Connect API 把截图和预览视频传上去。
另一个扩展方向是把它和产品需求文档联动。现在的编码 Agent 已经能读 Markdown 格式的需求文档,如果能从文档里提取核心卖点和功能关键词,再自动生成截图上的文案标注,上架素材的“文案一致性”会好很多。说到底,Goldie 这类工具真正的价值不在于省掉那十几分钟的重复劳动,而在于它把“上架素材”从一个容易被人拖延的手工活,变成了一个可以持续集成、持续质检的工程环节。这种变化,才是编码 Agent 最值得期待的地方。