# Shopify is moving from React Native back to Swift and Kotlin

> 来源：[HackerNews](https://shopify.engineering/back-to-native)

# Shopify 弃用 React Native，回归 Swift 与 Kotlin 原生开发

> 原文链接：https://shopify.engineering/back-to-native
> 来源：HackerNews

## 背景与概述

2019 年，Shopify 在收购 Tictail 团队后高调宣布全面押注 React Native，认为"在移动端，任何不共享的代码都疑似缺陷"。这一决策在当时引起了巨大反响，许多团队将其视为跨端方案的教科书级背书。然而五年之后，Shopify 工程团队发布了一篇名为《Back to Native》的文章，宣布正式弃用 React Native，移动应用回归 Swift（iOS）和 Kotlin（Android）原生开发。

这个转变并非一时兴起。Shopify 在文中坦承，React Native 并没有成为他们期待的"银弹"——共享代码带来的收益被日益增长的隐性成本所吞噬。更重要的是，原生开发生态本身发生了翻天覆地的变化：SwiftUI 和 Jetpack Compose 的成熟、AI 编程助手的崛起、以及移动端用户对性能和平台体验要求的提升，共同改变了跨端技术的成本收益方程式。

这一决策在 HackerNews 上引发了热烈讨论，因为它触及了移动端开发一个经久不衰的争论：**跨端共享代码与原生体验之间，到底该如何取舍？** Shopify 的答案是——在这个时间节点，原生重新赢了。

## 核心内容

Shopify 在文章中给出了回归原生的几大理由，可以归纳为以下要点：

**1. 共享代码的收益被高估了**

Shopify 发现，他们的应用中真正能够跨平台共享的业务逻辑远比想象中少。大量代码实际上是与平台紧耦合的——导航、手势、动画、无障碍支持等。所谓的"共享层"往往只是薄薄的一层状态管理，却需要付出维护两套桥梁（Bridge）、处理平台差异的成本。

**2. SwiftUI 与 Jetpack Compose 成熟了**

2019 年时，声明式 UI 框架还是 React Native 的专属优势。但如今 SwiftUI 和 Jetpack Compose 已经成熟，原生开发同样能享受到声明式、响应式的开发体验，而且与系统 API 零摩擦。React Native 曾经的"代差优势"已不复存在。

**3. 平台新特性需要第一时间跟进**

iOS 的 Widget、App Intents、Dynamic Island，Android 的 Material You、预测性返回手势等特性，跨端框架的支持总是滞后。对于 Shopify 这样追求顶级用户体验的公司，等待框架适配的窗口期是无法接受的代价。

**4. 调试与发布的一致性问题**

React Native 的调试构建和发布构建在行为上存在差异（如 Hermes 引擎、代码压缩），导致一些 bug 只在生产环境出现。这种"在我机器上是好的"问题消耗了大量工程师时间。

**5. AI 辅助编程改变了游戏规则**

这是文章中最具前瞻性的观点。当前这一代 AI 编程助手（如 Copilot、Claude 等）对 Swift 和 Kotlin 的训练语料质量更高、覆盖更广。一个由原生代码构成的代码库，反而比混合栈更容易获得 AI 的高质量辅助——AI 一次只需精通一门语言和一个平台。

## 技术分析

从技术架构角度看，Shopify 的决策反映了跨端方案的几个结构性问题：

**桥接层的固有开销。** React Native 的 JS 线程与原生 UI 线程之间需要序列化通信，即使有了新架构（JSI、Fabric），复杂的交互动画仍需借助 Reanimated 等方案绕开桥接。对于电商应用这种重列表、重手势的场景，原生渲染管线（Core Animation / RenderThread）依然是最短路径。

**双语言心智负担。** RN 团队实际需要掌握 JS/TS + Swift + Kotlin + C++（原生模块），��术栈复杂度不降反升。回归原生后，每位工程师只深耕一个平台，代码评审、on-call、知识传递的成本都显著下降。

此外值得注意的是，Shopify 并非全盘否定跨端——他们明确提到共享代码仍适用于后台管理系统（Admin）这类"效率优先"的内部场景。**关键洞察是：面向消费者的 App 和面向内部的工具，应该用不同的技术栈来服务。** 消费者 App 中 80% 的体验是平台特有的，而内部工具恰恰相反。

## 实践建议

对于正在技术选型十字路口的团队，Shopify 的经历提供了宝贵的参考：

1. **诚实地评估"可共享代码比例"。** 用数据说话：统计你应用中真正平台无关的业务逻辑占比。如果不足 30%，跨端框架的杠杆效应有限。

2. **区分产品类型。** 内部工具、B 端应用优先考虑 Flutter/RN 降低成本；面向 C 端的旗舰 App，原生 + 声明式 UI（SwiftUI/Compose）往往是更稳的选择。

3. **拥抱声明式原生框架。** 如果你的团队停留在 UIKit/View 系统时代，迁移到 SwiftUI 和 Compose 的成本远低于引入跨端框架，且能获得接近 RN 的开发效率。

4. **关注 AI 对技术栈选择的影响。** AI 助手正在重塑开发效率曲线。选择训练语料充足、社区活跃的原生技术栈，意味着能借 AI 之力放大单兵产出。

5. **小步迁移，而非大爆炸重写。** Shopify 采用了逐屏替换的策略：新功能直接用原生开发，旧 RN 屏幕随迭代自然消亡，避免了高风险的重写。

## 总结

Shopify 回归原生不是跨端技术的"死刑判决"，而是一次冷静的算账：当 SwiftUI、Jetpack Compose 和 AI 编程助手抹平了跨端框架的效率优势后，共享代码剩下的就主要是妥协。这个故事的启示在于——**技术选型没有永恒的正确答案，只有与当前生态和团队阶段匹配的答案。** 五年前 RN 是 Shopify 的最优解，五年后原生是，而这种敢于推翻自己、用数据驱动决策的工程文化，或许比结论本身更值得借鉴。