2025 年 1 月,Shopify 的 Mustafa Ali 在公司工程博客上写道,React Native 前景光明,Shopify 会继续投入。一年零八个月后的 2026 年 9 月 10 日,他在同一个博客上发文,宣布要把 Shopify 的全部移动 App 从 React Native 迁到 Swift 和 Kotlin。

Shopify 是一家帮商家开设和运营网店的平台公司。React Native 是 Meta 推出的开发工具,App 代码写一次,就能同时在 iOS 和 Android 上运行。Swift 和 Kotlin 则分别是开发 iOS App 和 Android App 的专用语言。换句话说,今后同一个功能要为 iOS 和 Android 各写一遍,一共写两遍。

Shopify 给出的理由只有一个。编程模型进步很大,用 Swift 和 Kotlin 把同一个功能做两遍,已经不像过去那么贵了。Shopify 对这一变化的说法是“LLMs changed one of the core assumptions behind our 2020 decision”(LLM 改变了 2020 年那个决定背后的一个核心前提)。

2020 年,Shopify 决定用一套代码同时开发 iOS 和 Android App

Shopify 在 2020 年全面采用 React Native,理由有三个:同一个功能不用做两遍;让没有移动开发经验的工程师也能参与 App 开发;减少让两个 App 功能保持一致所花的时间。

Shopify 说,这三点全都做到了。功能只做一次,省下了大量时间;没有移动开发经验的工程师也给 App 做出了贡献;花在拉齐两个 App 功能上的时间也少了。调优性能、跟进框架更新确实花了不少力气,但得到的更多。Shopify 推翻的不是一个失败的决定,而是一个成功的决定。

转向原生也不是因为性能。Shopify 明确写道:“React Native apps can be fast. Ours are.”(React Native App 也可以很快,我们的就很快。)转向原生,是因为智能体让两个平台共用一套代码的好处变小了,而按平台分别开发的好处还在。分开开发,可以更直接地用上 Apple 和 Google 提供的平台功能和官方开发工具,代码和平台之间夹着的框架和依赖库也会变少。

一名工程师和智能体花了一周,试着把 Shop App 迁成 iOS 原生代码

第一个迁到原生的 App 是 Shop。这是 Shopify 面向消费者的 App,购物者用它追踪订单、完成付款,经常排在应用商店购物类榜单的前列。当时这个 App 正好要迁到 React Native 的新架构,这是一项大工程。在为此投入之前,Shopify 先试了试:能不能借助编程智能体,直接用 iOS 和 Android 各自的原生代码把它重做一遍。

一名工程师花了一周时间,和智能体一起,参照现有的 React Native App,把能迁的功能尽量迁到 iOS App 上。一周下来还达不到上线水平,但证明了把功能一项一项原样搬到 iOS App 是可行的。智能体最得力的时候,是手边有现成实现可以参照的时候:把已有的功能移植成新代码、搭出页面的基本结构、接上数据、加上动画,再对着画面调整布局。

正式迁移由六名核心成员负责。他们搭好了 App 的底层和主要的使用流程,各功能团队中途加入,验证自己负责的部分,补上遗漏的边界情况。对老用户来说,这次更新必须和平常的更新没什么两样:登录状态不能丢,推送通知也要照常收到。推荐系统等其他系统要接收 App 发出的事件来用,所以分析事件也必须和以前内容一致。与此同时,团队有意砍掉了一些页面,又把一些页面做了简化。Shopify 表示,从概念验证到在应用商店上架,一共用了 12 周。

2020 年选择一套代码的第二个理由,是让没有移动开发经验的工程师也能参与 App 开发。这一次,即使没有一套共用代码,工程师们也能参与两个平台的开发。据说 React Native 工程师适应 iOS 和 Android 的界面框架 SwiftUI 和 Jetpack Compose,比预想的要容易:用声明式写界面的方式和 React 相近,智能体也帮工程师在自己不熟的平台上快速上手、做出贡献。不过原生专家依然不可或缺。Shopify 写道,生成的代码即使满足了功能需求,也可能带进重复代码、偏离架构设计的结构和性能问题。

让智能体一口气把整个 App 改写成原生代码,结果是一大堆没法上线的代码

Shopify 首先提防的,恰恰是看起来最省事的做法:把 React Native 代码整个丢给智能体,让它一口气改写成原生代码。即使先尽可能收集信息、整理成规格文档和任务文件,再让它去实现,产出的也是大量无法维护的代码,根本没法上线。

于是,为了把最大的 App,也就是 Shopify App 迁到原生,Shopify 做了一个叫 Helix 的内部工具。Helix 不指望第一次产出就是对的。工程师选定一个页面,Helix 就把它拆成若干个小步骤并提出顺序,工程师花几分钟审核、批准这个顺序。第一步通常是页面的基本骨架,越往后范围越大。每一步的说明只写几个词,也是有意为之。Helix 的文章写道:“Nobody can effectively review a wall of generated text.”(面对一大堵生成出来的文字,没有人能真正审得过来。)

每一步都要依次通过四道关卡才能提交,然后才开始下一步。

  1. 行为测试
    读取旧的 React Native 代码、为每一步生成的测试中,相关的必须全部通过。
  2. 画面比对
    在相同状态下截取新旧两个 App 的画面,让 Gemini 扮演一丝不苟的设计审核员,把差异连同在屏幕上的位置和严重程度全部列出来。只要还有能靠改代码修好的差异,默认就不能进入下一步。
  3. 两个专门挑错的代码审查
    两个互不共享上下文的审查智能体,检查代码是否符合 Shopify 成文规定的 App 架构标准。指出的问题必须全部改掉,反复进行,直到两个都批准为止。
  4. 工程师批准
    工程师查看代码和运行中的 App 来判断。这些反馈会被记录下来,用在后面的步骤里;批准过的结果积累得越多,不需要人工过问就能推进的部分也越多。

关卡不是建议,而是通过条件。没通过,智能体就根据反馈修改,再接受一次检查。可以重来任意多次,但不能自己认定结果已经够好就跳过去。Helix 的文章把这种方式总结为:“An attempt is allowed to be wrong. It is not allowed to ship until it isn't.”(尝试可以出错,只是在不再出错之前,不许上线。)

反对的声音也不小:代码变成两套,就是把复杂度翻了一倍

这篇公告在 Hacker News 上拿到了 1,200 多分,评论超过 900 条,其中反对意见也不少。有评论说,以为有了 AI 复杂度就是免费的,这是个陷阱,还补充说,AI 和人一样,面对复杂的代码也会犯迷糊。也有人批评,一个购物 App 没有任何技术上的理由,却要把同样的东西做两遍。一位自己在开发 React Native 这类跨平台工具的开发者则预测,因为成本更高,几年之内大家还会回到共用工具上来。他本人做的就是竞品,这一点也要一并考虑。

还有一种反对意见认为,这是工程师众多的大公司才做得起的选择。Shop App 的迁移虽然以六个人为核心,背后却还有各功能团队,以及专门为智能体开发内部工具的人。另外,Shopify 本来就是一家格外看重 AI 的公司。CEO Tobi Lütke 在 2025 年 4 月亲自公开了一份内部备忘录,里面写道:“Reflexive AI usage is now a baseline expectation at Shopify”(下意识地使用 AI,现在是 Shopify 对每个人的基本预期)。这次的文章也提到,Shopify 从 2021 年,也就是 ChatGPT 问世的前一年,就开始用 LLM 开发软件了。公告文章和 Helix 文章的结尾,都是移动和 AI 工程师的招聘信息。

最大的 App 还在迁移之中。这个 App 就是有 300 多个页面、还带主屏幕小组件和 Apple Watch App 的 Shopify App,Shopify 表示会在今年内推出。

过去靠共用代码自动保持的功能一致,今后要靠验证流程来守住

用一套代码开发的时候,两个 App 的功能自然是一样的,因为两边跑的是同一份代码。Shop App 迁到原生之后,Shopify 依然保留了“Android and iOS must be at feature parity at all times”(Android 和 iOS 的功能必须始终保持一致)这条原则,并写道:这条过去由共用代码守住的原则,今后要靠开发和发布流程来守住。

这套流程的核心是验证。要确认智能体改过的 App 能不能正常运行,就得在模拟器里通过页面结构信息或截图读出 App 的状态。Shopify 写道:“It doesn't matter how good the model is if it can't test its work quickly”(如果没法很快检验自己的工作,模型再好也没用)。因此,Shopify 正在调整 App 的架构,把 App 的行为和界面分开,让它可以直接从命令行调用。

按 Shopify 的说法,智能体改代码只要几秒,确认改得对不对却要好几分钟。

2020 年,Shopify 把代码合成一套,专注于减少要写、要维护的代码量。如今写代码、改代码都可以交给智能体,Shopify 关注的已经不是代码量,而是核查 AI 产出所需的时间。