Shopify 宣布从 React Native 回归原生开发
2020 年,我们决定全面押注 React Native,这笔赌注回报丰厚。功能只需开发一次,节省了大量时间;没有移动端背景的开发者也能参与 App 开发;我们也不用再为双端功能对齐疲于奔命。
2025 年 1 月,我曾撰文表示 React Native 前景光明,Shopify 会继续加大投入。以当时的判断来看,这确实成立——React Native 运转良好,至今仍是一个优秀的框架。但如今编码模型已经大幅进步,对我们和团队而言,用 Swift 和 Kotlin 开发同一个功能,早已不再是过去那个代价。
我们不会因为一个决定当时成功就一成不变。当核心假设发生变化,我们会重新审视它是否仍然正确。LLM 改变了我 2020 年决策背后的一个核心假设,于是我们从第一性原理出发,重新评估了移动端技术栈。
结论是:回到 Native。
为什么要回到 Native
2020 年我们从 Native 转向 React Native,基于三个理由:
- 不再重复开发相同功能
- 让开发者可以跨端协作
- 把时间从双端对齐中解放出来,投入到真正创造价值的交付上
React Native 持续兑现了这些收益。我们确实在性能优化、React Native 底层基础设施改进、跟踪框架更新和外部依赖上投入了大量时间和资源,但这些都是可以接受的取舍。使用 React Native 带来的收益远大于这些投入。
Shopify 从 2021 年起就用 LLM 构建软件(比 ChatGPT 还早一年)。最初,我们用它来实现功能、排查修复 bug、审查代码。随着模型能力提升,我们交给它的任务复杂度也在不断提高。到 2025 年下半年,它们不再只是帮我们更快地写代码,而是让我们开始质疑:把软件写两遍,是否还意味着要做两倍的工作量。
我们决定重新评估移动端技术栈,并开始做原型验证当初的技术选型是否依然成立。我们借助 LLM 用 Swift 和 Kotlin 重构了最大几个应用的核心部分,效果之好出乎意料。Agent 可以:
- 以 iOS 版本为参考实现 Android 上的同一功能,反之亦然
- 帮助开发者快速上手,在自己主攻的技术栈之外也能高效贡献代码
- 通过共享的规格说明、测试和评审节点,大幅降低双平台保持功能一致性的维护成本
选择 Native 仍然意味着要在两个平台上开发和维护软件,这部分成本并没有消失。变化在于,agent 现在已经能承担足够多的实现、翻译、测试和评审工作,使其不再像 2020 年那样成为决定性因素。
React Native 应用可以做到很快,我们的应用就是如此。我们做出这一改变,是因为 agent 削弱了共享实现所带来的优势,而针对各平台分别开发的优势依然存在。Native 让我们更贴近平台能力和官方工具链,代码与平台之间的框架和依赖层也更少。
React Native 开源库的未来
在介绍迁移方案之前,我们希望确保这次过渡干净利落。从一开始,我们就希望回馈 React Native 社区,让它变得更好。我们发布的多款开源库已成为各自领域内的首选。我们非常感谢社区的热烈支持,并承诺平稳过渡、不给任何人带来意外。
React Native Skia
Shopify 将继续赞助该项目至 2026 年底,之后 William Candillon 会继续投入维护。未来几个月内,他将 fork 这个仓库,并以新名称发布该库。过渡完成后,原仓库将被归档。我们会持续发布进展更新,确保大家有充足的时间迁移。如果你的应用依赖这个库,请考虑赞助它。
FlashList
该库每周下载量约 200 万,已成为 React Native 中渲染高性能列表的默认方案。考虑到它对生态的重要性,Shopify 会继续修复破坏兼容性的严重问题。我们目前正与几家公司讨论长期维护 FlashList 的事宜。如果你感兴趣,可以通过这里联系我。
Restyle
Restyle 的用户群比其他库小,所以我们将归档这个仓库。我们会保证它到 2026 年底仍然可用,之后停止维护。欢迎任何人 fork 并继续推进,如果有团队想接手,我们会协助交接。
我们的迁移方式
Shopify 拥有多个大型应用(Shopify、Shop、Point of Sale、Inbox)。全球数以百万计的商家和买家每天都在依赖这些应用谋生、购买心仪的品牌商品。
我们讨论过两种路径:逐步迁移到 Native(brownfield 方式),还是从零重建(greenfield 方式)。之前迁移到 React Native 时,我们对几个最大的应用选了 brownfield 方式,因为完全重写需要好几年,而且重写期间还得停掉新功能发布。
不过这次 greenfield 方案成为明确的选择,原因如下:
- LLM 很擅长以 React Native 版本为参考,用 Swift 和 Kotlin 构建功能
- 让我们能以最理想的方式从零重建,不再受之前任何约束限制
- 原型验证表明,借助 coding agent,我们重建这些应用的速度远快于过去
Shop 应用常年占据应用商店购物类榜单前列,是第一个完成迁移的应用。借助 AI,团队仅用 12 周便从概念验证推进到完整重建并上架应用商店的原生应用。我们已撰文详细讲述了这次迁移。
Shopify 主应用的迁移(规模最大,包含 300 多个界面、主屏和锁屏小组件、Apple Watch 应用、复杂组件、Siri Shortcuts 等)也在推进中,预计今年稍晚发布。其余应用将很快完成迁移。
拒绝低质产出
最直觉的做法是把 LLM 指向 React Native 代码库,试图一次性在原生端复现全部功能,但行不通。即便让它先尽可能多地收集信息,把结果固化成规格文档和任务文件,再逐条实现,最终得到的仍是一堆无法维护、无法上线的代码。
为此,我们构建了一个名为 Helix 的系统,采用更渐进的策略。它不指望第一次输出就正确,而是构建了一个循环:不完善的尝试根本无法推进,直到结果达标。
开发者让 Helix 指向某个界面,Helix 读取 React Native 代码后提出一组检查点(按顺序切分的细小任务块),每个都能在几分钟内完成审查。然后逐点推进:每个检查点都必须用测试验证行为、在视觉审查中与运行中的应用保持一致、通过两个对抗性代码审查者的检验,并获得人工确认后才能提交,下一个检查点才会启动。每次审查的反馈都会被记住,随着迁移推进,循环会越来越自主。
Helix 使用 Swift 和 Kotlin 重建 Shopify 移动应用中的某个界面
这套方法效果极好,让我们用过去一小部分的时间就能重建应用。
构建快速反馈循环
让 Agent 可靠地控制模拟器一直是块心病。模拟器没法稳定地完成构建、测试和迭代,我们不得不时时盯着它们。虽然我们做了工具让 Agent 能够复现 bug、修复并自行验证,但速度慢又脆弱。React Native 的热模块重载有所缓解,却治标不治本——根本原因在于模拟器控制本身很慢:依赖 accessibility tree 或截图来获取应用状态、执行操作、验证结果。Agent 几秒钟就能改完代码,却要花好几分钟测试结果,迭代因此变得极其缓慢,离不开人工。模型再强,如果不能快速验证自己的工作也没用,这一点在移动端尤其困难。
我们的解决思路是让应用架构同时服务于人类和 Agent。核心原则是:业务逻辑与 UI 彻底解耦,能够在桌面端无界面运行。然后通过一个 CLI 把它开放给 Agent,让它们以毫秒级速度迭代,而不需要动用模拟器。
用 CLI 导航应用并执行操作
借助 CLI,Agent 可以检查应用状态、在不同页面之间跳转、执行各种操作,全程无需触碰 UI。这带来了极快的反馈循环,Agent 也能连续自主工作数小时。
必须与模拟器交互时,CLI 可以通过远程模式连接模拟器,直接用命令驱动 UI,无需解析布局或 accessibility tree。这样性能极快,还能跑 E2E 测试。
这是实时速度(未加速)
接下来
我们会把所有移动应用迁移到 Swift 和 Kotlin,全程借助 AI 完成。Shop 已经以纯原生应用的形态上线,Shopify 应用正在迁移中,其余的也会陆续跟进。我们推进得很快,但没有降低标准:每一次重建都必须在性能、稳定性、无障碍和产品质量上达到甚至超越现有水平。这不只是用另一种语言把同样的应用重写一遍,而是重新构建,让人和 Agent 都能快速理解、测试和修改它们。
迁移不是终点。成功的标准是团队能为商家和买家更快交付更好的体验。我们会从产品迭代速度、应用质量以及 agent 能自主完成的工作量这三个维度来衡量。
过程中学到的经验我们会持续分享,包括对 Helix——我们面向 agent 设计的架构——的深入解析,以及用 agent 构建移动应用的实践。当初我们坦诚总结了使用 React Native 的教训,这次迁移我们同样会保持透明。
这是我们接手过的最具野心的移动端工程项目之一。如果你也想参与构建 Shopify 下一代移动应用,我们正在招聘移动端工程师、基础设施工程师,以及 AI 与软件工程交叉领域的开发者。
致谢
对今天的 Shopify 来说,Native 是正确的选择;而 2020 年的 Shopify 选择 React Native,同样是对的。那段成功离不开每一个为之付出的人。
Meta
感谢 Meta 的 React Native 团队多年来对这个框架的精心维护,认真倾听我们的反馈,并与我们紧密合作。如今 React Native 在架构、性能、工具链和社区方面的显著提升,离不开你们的持续投入。
William Candillon
感谢你创造了 React Native Skia,并将其推进到远超所有人想象的高度。你重新定义了 React Native 在图形和动画方面的可能性,我们很期待看到它接下来会走向何方。
Software Mansion
感谢你们在 Reanimated 上的全部工作,感谢倾听我们的反馈,也感谢帮助我们攻克了应用中最棘手的动画和性能难题。
Shopify 工程师
数百名工程师参与 React Native 的引入、应用迁移、共享基建搭建、性能优化、集成维护以及对生态社区的回馈。你们中的许多人重新以初学者的心态面对一切,挑战了固有的认知假设,在持续为商家和买家交付产品的同时让这次转型得以成功。谢谢你们。
React Native 社区
感谢所有使用过我们开源库、贡献过代码、反馈过问题、质疑过我们的决策、以及分享过所学的人。你们的贡献与反馈——包括那些不留情面的——都让我们的工作变得更好。
过去六年积累的工具、经验与建立的合作关系,将继续影响 Shopify 构建移动应用的方式。我们衷心感谢每一位参与者。