作者用 Claude Code 等 agent 完成 90+ 移动应用交付。核心经验是 AI agent 的价值不在速度而在上下文保持:可跨 12 个文件统一重命名、更新 schema 全链路、逐次构建-读错-修复,无需手动粘贴堆栈跟踪。
人们首先假设 AI agents 之所以有价值,是因为它们比你打代码更快。这是对的,但那不是有趣的部分。有趣的部分是,一个 coding agent 可以在工作记忆中完整保持一个小应用的上下文,并一致地对其进行操作——在十二个文件中重命名变量、更新 schema 并修改所有相关的地方、运行构建并读取错误然后自动修复,无需你把堆栈跟踪复制粘贴到聊天窗口。
一旦我停止把 agent 当作自动补全引擎,开始把它当作一个永不厌倦繁琐工作的初级工程师,投资组合型开发方式就成为了可能。一个人无法手工维护九十个代码库。但一个人加上一个可以指向某个代码库并说"构建坏了,修复它"的 agent 就可以了。
写应用从来不是瓶颈。真正的瓶颈是 App Store Connect 和 Google Play Console 的提交流程。两个平台都有数十项细微的、容易遗漏的要求,这些要求与你的代码是否正常工作毫无关系:
订阅应用必须在描述中包含 EULA 链接,否则会在真人审核前被脚本自动拒绝。
仅针对某些地区配置的免费试用,可能在一个地区通过审核,在另一个地区却抛出购买错误。
在 App Store Connect 上删除应用记录并不会释放 bundle ID——它永久被保留,这在快速迭代时尤其重要。
Google Play 的分类器会标记诸如"读取 Android 系统日志"这样的表述,即使底层权限用法完全无害,且申诉流程也不清晰。
这些内容根本不会出现在"如何构建你的第一个应用"的教程里。它们只在你被拒绝数十次并开始维护检查清单后才会浮现。我最终让 agent 维护这个检查清单作为字面上的提交前门控脚本,因为我已经不相信自己能在九十个应用中记住十八条规则。
真正造成伤害的 bug 从不在业务逻辑里。它们是这样的东西:某个插件被移除后遗留下来的已废弃广告 SDK 依赖,导致在特定 Android 版本上冷启动时崩溃;或者某个区域设置检查在所有模拟器上都能工作,但在真实日本设备上返回错误结果,因为 JS 引擎的 Intl 实现的本地化方式与你预期不同。
agent 在这里真正有价值的不是聪慧——而是执着和广度。我可以要求 agent 在全部九十个仓库中扫描某个特定的反模式(未被引用的依赖、硬编码的 staging URL、启动器和应用商店列表中重复的图标不匹配),并在几分钟内得到真实答案,而不是花一个周末手工 grep。价值恰恰因为投资组合规模大而快速增长——同样的技术用在三个应用上就只是"用额外步骤来做查找替换"。
我想诚实地谈论局限,因为过度夸大对任何人都没好处:
任何涉及真实金钱的事情——应用内购买配置、订阅定价、Stripe webhooks——每次都需要手工审核。Agent 擅长匹配之前的错误模式,但如果你不明确告诉它检查什么,它就捕捉不到错误的价格点。
破坏性操作(强制推送、数据库迁移、删除阻止审核的记录)永远不能完全委托。我对任何不可逆的事情都遵循"agent 提案,我批准"的硬性规则。
长时间运行或不稳定的外部流程——因为共享临时目录而间歇性失败的构建,或关于 CDN 缓存传播说谎的情况——仍然需要人工来识别这个模式不是随机的。
诚实的总结是,AI coding agents 并未取代软件发布中需要判断力的部分。它们取代了需要耐心的部分:逐行阅读一百行 diff、记住九十个应用中哪个还在用已弃用的权限、重新执行同样的十五步提交检查清单但不因为疲倦就跳过第十一步。
有两个习惯比任何具体工具都更重要:
记录失败模式。 当遇到失败模式时,把它写进纯文本文件供 agent 以后读取,而不是依赖记忆。第二次提交因为同样原因失败,那就是流程 bug,而不是一次性事故。
把验证当作不可商议的。 Agent 报告"构建成功"除了说明编译器没抱怨外什么都证明不了。我学会了要求实际的工件检查——二进制是否上传了、应用商店列表是否反映了它、应用是否能打开——才能宣布任何东西完成。
如果你想以更结构化的方式来实际练习如何用 AI coding agent 构建,而不仅仅是阅读相关内容,我一直在把学到的东西整理到 AI Craft Campus 的一份小资源里——它面向想要从"我让 AI 写了些代码"进阶到"我用 AI agent 处理重复工作来运营一个小规模、有效运作的软件投资组合"的人。这也是个进行中的工作,就像其他一切一样。
九十个应用不是终点线,只是计数器碰巧所在的位置。让我走到这里的工作流——小的仓库、对无聊部分的激进自动化,以及对"构建成功"这个定义的健康怀疑——这才是我真正推荐采纳的部分,不管你用的是哪个具体工具。