再见,应用中心!你好,EAS + Sentry + GitHub Actions!
React Native 开发人员大遗憾:微软宣布将于 2025 年 3 月 31 日关闭Visual Studio App Center。
多年来, Infinite Red一直将 App Center 作为许多 React Native 咨询客户的 CI/CD 流程和开发工作流程的关键部分。它有很多有用的功能:
- 构建:基于云的 iOS 和 Android 构建服务
- 测试:在真实的 iOS 和 Android 设备上进行设备测试
- 分发:部署到测试人员和应用商店
- CodePush:直接将更新部署到用户的设备
- 分析和诊断:崩溃报告和使用情况分析
它们集中在一个地方确实很方便,但是现在微软停止了这一计划,我们需要寻找一些替代方案。
微软为何关闭App Center?
我不认为微软宣布放弃对 React Native 的大量投资。毕竟,微软领导了React Native 发布团队,维护了React Native Windows / macOS、React Native Test App、rnx-kit等。他们还在 Office 应用套件、Skype 甚至 Windows 等中使用了 React Native!他们在 React Native 上的投资越来越多。
相反,我有一个理论。我对此没有任何内幕信息,但我可以做数学计算。App Center 的许多服务都是免费的,这不是一个可持续的商业模式,即使这使得它在使用 React Native 的公司中很受欢迎。在我看来,除非 App Center 成为收入来源,否则它最终将不可避免地关闭。
这确实令人沮丧,但没关系——我们还有一些很好的替代方案!
让我们根据我们丰富的 React Native 经验,谈谈我们对每个方面的建议。我们对最佳前进道路有一些自己的看法。
TL;DR: 使用 EAS (世博会报名服务) 用于构建管道和无线 (OTA) 更新,GitHubActions 或 CircleCI 用于自动化测试,以及哨兵用于错误跟踪和监控。
什么是 EAS?
EAS是Expo团队构建的一套云服务,旨在简化 Expo 和裸 React Native 项目的构建、部署和更新。(您无需使用 Expo 即可使用 EAS!)
一些主要特点:
- EAS Build:为 iOS 和 Android 托管云构建。轻松构建二进制文件,无需复杂的本机工具。
- EAS 提交:自动将您的应用提交到 Apple App Store 和 Google Play Store。
- EAS 更新:将更新直接部署到您的应用程序,类似于 CodePush。
EAS 的魅力在于所有组件的协同工作。您可以设置从代码到生产的顺畅工作流程,并能够灵活地根据自己的需求进行自定义。
EAS 也 100% 专注于 React Native,而 App Center 则更像是一种通用的移动应用服务。Expo 的团队是 React Native 生态系统的专家,并且已经从事多年。这意味着他们非常关心 React Native 应用,并且他们的服务最适合与 React Native 配合使用。
什么是 Sentry?
Sentry是一款流行的错误和性能监控平台。它可以帮助开发人员跨多个平台和语言识别、分类和修复代码中的问题。
Sentry 可以为您提供非常重要的见解,让您的 React Native 应用保持稳定和高效。它是 EAS 的绝佳补充,可实现强大的 React Native 工作流程。我们使用 Sentry 多年,它是同类产品中最好的之一。
对于 React Native 应用程序,Sentry 提供了一些非常好的功能:
- 错误监控:在一个地方捕获并汇总来自 JavaScript 代码、本机代码和第三方库的错误
- 性能监控和分析:通过在各种环境中对程序的调用堆栈进行采样来跟踪软件的性能。获取有关代码的函数级信息,并使您能够微调程序的性能。
- 发布健康:比较不同版本之间的崩溃率、故障率和性能,以快速识别有问题的版本
- 设备数据:查看设备详细信息(如型号、操作系统、方向等),以更快地重现错误
- 面包屑:通过自动收集的事件日志了解用户在发生错误之前做了什么
- 会话重放:目前,React for web 具有会话重放功能,但他们似乎很快就会推出 React Native 重放功能
不仅如此,Sentry 还非常关心他们的React Native体验。他们的文档很好,也很相关。
我们将在下面的错误跟踪和指标部分详细讨论 Sentry。
好的,让我们开始迁移!
从 App Center Build 迁移到 EAS Build
EAS Build 是 App Center Build 的自然替代品,尤其是对于 React Native 开发人员而言。它为 iOS 和 Android 提供托管云构建,无需复杂的本机工具设置。
以下是迁移的详细指南:
- 使用以下命令安装最新的 EAS CLI
npm i -g eas-cli
- 在项目目录中运行
eas init
以设置 EAS 配置 - 使用以下方式登录
eas login
eas.json
通过运行来设置你的构建配置文件eas build:configure
- 运行
eas build
以开始您的第一次构建
欲了解更多详细信息,请参阅EAS Build 文档。
从 App Center Test 迁移到 GitHub Actions / CircleCI
如果您尚未设置其他测试 CI 服务,我们建议您使用 GitHub Actions或CircleCI。我们的团队已经使用它们多年了,事实上在初步评估之后从未真正使用过 App Center Test。
GitHub 操作
一般来说,如果您使用 GitHub,GitHub Actions 是您的最佳选择。它会自动配置您的环境变量,并且设置起来稍微省力一些。
使用 GitHub Actions,您可以相对便宜地运行 Android 版本。以下是用于设置该配置的示例 Android React Native 配置(来源)。
<span style="background-color:#f9f9f9"><span style="color:#242424"><span style="color:#836c28">名称:</span> <span style="color:#c41a16">GitHub</span> <span style="color:#c41a16">操作</span>
<span style="color:#836c28">:</span> [ <span style="color:#c41a16">push</span>,<span style="color:#c41a16">pull_request</span> ]
<span style="color:#836c28">作业:</span>
<span style="color:#836c28">构建:</span>
<span style="color:#836c28">运行于:</span> <span style="color:#c41a16">ubuntu-latest</span>
<span style="color:#836c28">容器:</span> <span style="color:#c41a16">reactnativecommunity/react-native-android</span>
<span style="color:#836c28">步骤:</span>
<span style="color:#1c00cf">-</span> <span style="color:#836c28">用途:</span> <span style="color:#c41a16">actions/checkout@v2 </span>
<span style="color:#1c00cf">-</span> <span style="color:#836c28">名称:</span> <span style="color:#c41a16">Envinfo</span>
<span style="color:#836c28">运行:</span> <span style="color:#c41a16">npx </span> <span style="color:#c41a16">envinfo </span>
<span style="color:#1c00cf">-</span> <span style="color:#836c28">名称:</span> <span style="color:#c41a16">构建</span> <span style="color:#c41a16">应用程序</span>
<span style="color:#836c28">运行:</span> <span style="color:#c41a16">yarn </span> <span style="color:#c41a16">install </span> <span style="color:#c41a16">&& </span> <span style="color:#c41a16">cd </span> <span style="color:#c41a16">android </span> <span style="color:#c41a16">&& </span> <span style="color:#c41a16">chmod </span> <span style="color:#c41a16">+x </span> <span style="color:#c41a16">gradlew </span> <span style="color:#c41a16">&& </span> <span style="color:#c41a16">./gradlew </span> <span style="color:#c41a16">assembleRelease</span></span></span>
如果您想要构建 iOS,则需要 macOS 映像,每次构建的成本大约是 macOS 映像的 8-10 倍。我们正在为此制定Ignite Cookbook配方,一旦有配方,我会更新文章(如果我忘记了,请通过电子邮件提醒我!)
圆环
如果您不使用 GitHub 或因为其他原因不想使用 GitHub Actions,我们发现CircleCI是一个很好的替代方案。
在我们的Ignite Cookbook中,我们有一个在 CircleCI 上应用 React Native 的秘诀:
Sample YAML for CircleCi for Ignite | Ignite Cookbook for React Native
CircleCI 与 GitHub Actions 一样,以相对便宜的成本提供 Android 构建,而通过 macOS 机器构建 iOS 的成本约为 Linux 机器的 8-10 倍。
EAS 构建测试
如果您有兴趣尝试的话,EAS Build 还通过Detox提供了非常早期的端到端测试服务。
从 App Center Distribution 迁移至 EAS Submit
EAS Submit 可让您轻松将应用版本发送给测试人员和应用商店。它是 App Center 分发服务的绝佳替代方案。
设置 EAS Build 后,您可以使用eas submit
它将您的构建上传到 Apple App Store 或 Google Play Store。EAS 将负责将您的构建发送给相应的审阅者。
对于 iOS 上的 TestFlight 分发,您还可以使用eas submit --platform ios --non-interactive
它上传您的构建并自动将其发送给您的 TestFlight 测试人员。
请参阅EAS 提交文档以了解更多信息。
从 App Center CodePush 迁移到 EAS 更新
App Center 最常见的用途之一是使用 CodePush 进行 OTA(“无线”)更新。以下是有关如何从 CodePush 转移到 EAS 更新的高级指南:
react-native-code-push
通过删除该包以及 JS 和本机代码中对它的任何引用来卸载 CodePush SDK 。- 确保您的项目有
app.json
一个带有expo
对象的正确文件。 - 通过运行来安装该
expo
包npx install-expo-modules@latest
。 - 使用 安装最新的 EAS CLI
npm i -g eas-cli
。 - 使用 登录您的 Expo 帐户
eas login
。 - 按照从步骤 4 开始的 EAS 更新指南,为 EAS 更新配置您的项目,构建和部署更新。
- 测试您的应用以验证更新是否有效。安装当前的应用商店版本,使用 EAS 部署新更新,然后启动应用以在几次重启后查看更新。
- 重建您的应用程序并将新的支持更新的版本提交到应用商店。
这只是一个概述 — 请务必遵循详细的 EAS 更新迁移指南,了解具体步骤。Expo 最近也发布了一篇关于此内容的博客文章。您应该查看EAS 更新文档,它可以帮助您配置应用检查更新的时间。
从 App Center Analytics & Diagnostics 迁移到 Sentry
从 App Center 的分析和崩溃报告切换到 Sentry 相当简单:
- 注册Sentry 账户并创建新项目
- 使用以下命令在您的应用中安装Sentry SDK(1500 颗星)
npm i @sentry/react-native
- 在应用程序的入口文件中初始化 Sentry(或 Ignite 的内置位置)
- 部署您的应用程序并开始在 Sentry 仪表板中查看错误报告和分析
Sentry 的 React Native 文档有更详细的说明,如果你更喜欢Expo 的 Sentry 文档,它们也很好。
该@sentry/react-native
SDK 是 Expo(Expo CLI)和 Sentry 合作开发的,这就是它如此优秀的原因!
您可能还需要考虑在 Sentry 中设置发布健康跟踪,以监控无崩溃的用户和会话。这类似于 App Center 提供的分析数据。
自托管 EAS 和 Sentry
EAS和Sentry有相当慷慨的免费套餐,但如果您需要超出他们提供的服务且成本过高,您可以选择自己处理。
值得注意的是,两者都有付费等级,这意味着......它们可能不会像 App Center 那样关闭。🥴
对于 EAS,您可以进行本地构建,而不必依赖其服务器。顾名思义,您可以在您的机器上本地运行它们,也可以在您自己的基础架构上运行它们。以下是相关文档。
<span style="background-color:#f9f9f9"><span style="color:#242424">eas build--平台android--本地</span></span>