Expo SDK 37 现已发布

2025-06-05

Expo SDK 37 现已发布

今天,我们宣布十年来的第一个版本发布!💐🌸Expo SDK v37.0.0🌸🌷(内部使用 React Native 0.61)是我们的 Spring 版本,同时也开创了一种全新、更大胆的赋能开发者的方法。 

即使我们加倍努力使我们的 Expo SDK 更加强大和可靠,我们也在对开发人员灵活性进行更大、更广泛的投资:将来您将不再需要在 OTA 更新等 Expo 功能和按照您想要的方式自定义应用程序之间进行选择。

继续阅读了解更多详情。最后,同样重要的是,我们在帕洛阿尔托、旧金山、温哥华、纽约、博卡拉顿、赫尔辛基、阿姆斯特丹、奈梅亨和克拉科夫的办公地点祝您身体健康,万事如意。

🗓 季度 SDK 版本发布

首先,简要介绍一下我们 2020 年的计划。过去,我们会根据多种因素(新功能、React Native 的新版本、iOS 新版本等外部限制)不定期地安排 SDK 发布。

今年,我们的目标是实现更可预测的发布时间。我们计划在每个季度末发布一个新的 SDK 版本。SDK 37 是第一个,如无意外,我们预计今年还将分别在 6 月、9 月和 12 月发布三个 SDK 版本。我们希望这能让团队更可预测地规划自己的开发/升级周期和发布节奏。

🌟 ExpoKit → 裸工作流程

12 月,我们分享了在 2020 年进行重大投资的计划,以提高您随时随地使用本机代码自定义应用程序的灵活性。 

裸工作流程现已完全取代 ExpoKit。随着更新、闪屏和通知模块引入裸工作流程,我们已达到或超越了裸工作流程和 ExpoKit 工作流程之间的功能对等性,因此我们将在 SDK37 中弃用 ExpoKit。今后,请勿在新项目中使用 ExpoKit;请改用裸工作流程。如果条件允许,请将使用 ExpoKit 的现有项目迁移到裸工作流程。

为了方便 ExpoKit 用户的过渡,我们仍将为 SDK37–38 发布 ExpoKit,但SDK 38 将是最后一个新的 ExpoKit 更新。在 SDK 38 之后,App Store 和 Play Store 中的 ExpoKit 应用将继续无限期运行,并且要获取 Expo 模块中的错误修复和新功能,您需要转到 Bare 或 Managed 工作流程。

阅读此博客文章中的更多详细信息,包括将 ExpoKit 项目迁移到 Bare 工作流的指南

📱 Expo Client 中的新开发菜单

iOS 和 Android Expo 客户端都拥有一个全新、更友好、信息更丰富、外观更美观的开发者菜单!你可以在开发模式下通过摇晃设备来激活它,一如既往。

Android 上黑暗模式下新 Expo Client 开发菜单的屏幕截图。

Android 黑暗模式下的全新开发者菜单。大家好!👋

🔥 Firebase Analytics 📈 和电话身份验证 ☎️

Firebase Analytics 现已在托管工作流中可用!这项备受期待的功能可让您将事件记录到 Google Analytics 中。它使用生产应用中的原生 Firebase SDK 以及 Expo 客户端中的快速 JavaScript 实现。阅读此博客文章了解更多信息。

另一个热门需求是支持 Firebase 电话身份验证。我们创建了一个名为 expo-firebase-recaptcha 的辅助软件包,它通过提供创建 Firebase 电话身份验证所需的 reCAPTCHA 验证器所需的构建块,使电话身份验证成为可能。(如果您正在寻找一个现成的选项,我们在doorman.cool的朋友可以为您提供后端和 UI!)expo-firebase-recaptcha 目前正在进行最终测试,预计将在 SDK 发布后不久推出。

🚀 Expo 网站更新

随着 Expo Web 接近 V1 版本,我们一直在完善其开发工具和功能集!您可以点击此处关注进度,并判断其是否满足您构建网站的需求。我们目前正在开发 React Navigation v5 的 Web 支持,但在此之前,您应该使用其他 Web 导航解决方案,例如Expo + Next.js。查看React Native 目录源代码),了解已上线的 Expo + Next.js 应用示例!

新功能

我们改进了对、和其他各种模块的网络react-native-gesture-handler支持react-native-reanimated

改进的工具

  • expo start:web --https现在自动签署 SSL 证书,跳过桌面浏览器警告。这使得测试加密和权限等安全功能更加轻松!
  • expo start:web --android现在尝试在 Android 模拟器上的 Chrome 中打开您的网站。
  • expo build:web --clear清除 Webpack 和 PWA 缓存。

更小、更快的 Web 构建

  • Service Worker 缓存缩小35%
  • PWA 清单体积缩小23%
  • 资产清单缩小31%

生活质量的改善

  • 改进的加载速度和进度指示器。
  • 更好的源图和调试。
  • 测试版 Web 支持app.config.js

现在可以在expo start:web和 中自动生成图标expo build:web

  • 要设置 favicon 模板图像,请在您的app.jsonexpo.web.favicon中定义它expo.icon
  • 您可以使用远程 URL,或 png、jpg、gif 类型的本地图像(使用 PNG 可获得最佳效果)。
  • 如果您链接自定义图标,那么<head />您的web/index.html生成将被完全跳过。

强大的 PWA 生成

  • 启动画面和图标生成现在更快了。
  • 为了获得更好的生成速度,请确保已全局安装了 sharp npm i -g sharp-cli,否则将使用 Jimp。
  • web/index.html — <head />组织得更好,并且添加了更少的主观价值观。

现在,您可以使用CLI生成控制更精细的 PWA 资源。它甚至可以用于 Expo + Next.js 项目!expo-pwa

已弃用的实验性网络功能

我们改进了许多实验性功能来改善开发人员体验:

  • 已删除:在您的中expo.web.dangerous.viewport使用,如果您的模板缺少此值,那么您将收到通知,告知您已添加一个以支持旧版。<meta name="viewport" />web/index.html
  • 已删除expo.web.dangerous.noJavaScriptMessage:使用新< noscript />web/index.html
  • 已删除expo.web.build.rootId:我们已决定将其用作rootSPA 根元素的 ID。“root”是 create-react-app 的默认值,在 React 社区中广泛使用。
  • 已删除expo.web.meta.googleSiteVerification、、,以支持模板中expo.web.meta.twitter的元expo.web.meta.openGraph标记expo.web.meta.microsoft<head/>web/index.html
  • 已删除WebpackBundleAnalyzer:了解如何将WebpackBundlerAnalyzer 与 Expo web 一起使用。
  • 删除了 Gzip 和 Brotli 压缩,转而使用托管提供商和 CI 构建。

升级 Web

大多数 Web 项目不需要任何修改 - 只需安装最新版本的 Expo CLI。

如果您已@expo/webpack-config在本地安装,请务必将其升级到最新版本(当前为0.11.11)。查看我们的Expo Webpack 文档

如果您已将其复制web/index.html到您的项目中,请务必在此处查看最新模板:web/index.html

  • 复制视口
  • 复制样式
  • 复制< noscript/>
  • 更改根 ID
  • 如果您没有自定义图标,请删除图标链接:<link rel="shortcut icon" href="%WEB_PUBLIC_URL%favicon.ico" />

您还可以web-report从您的 中 删除.gitignore

🌐 UIWebView 已移除

如果您最近向 App Store 提交了 iOS 版本,您可能收到了 Apple 发出的关于 UIWebView 的警告。Apple 很快将开始拒绝使用此已弃用 API 的 App Store 提交。

对于 SDK 37,我们更新了所有原生依赖项,使其不再依赖 UIWebView,这意味着 SDK 37 的构建版本将不再依赖 UIWebView ✨。此外,我们已将此变更反向移植到 SDK 36 构建器,以便您可以继续提交 SDK 36 应用的新版本。

这意味着,为了向 App Store 提交新版本,您需要使用 SDK 36 或 37。App Store 中已有的旧应用程序将保持可用并继续正常运行。

🥽 弃用 AR

AR 模块(用于公开 iOS ARKit 库)在其整个生命周期内都处于实验阶段。我们决定不再继续维护此库,而是将有限的资源集中用于其他方面。SDK 37 将是包含此模块的最后一个 SDK 版本。

如果您使用 AR 模块并有兴趣维护该包的社区分支,请通过电子邮件community@expo.io告知我们!

🧹 从 Expo 客户端删除 SDK 33

为了减少需要支持的版本数量,我们会定期删除使用率较低的 SDK 版本。此版本标志着 SDK 33 的生命周期结束。与往常一样,您使用 SDK 33 构建的独立应用将继续运行;但是,SDK 33 项目将无法在最新版本的 Expo 客户端中运行。如果您想重新运行 expo build,则需要从 SDK 33 升级,最好升级到 SDK 37,这样您在一段时间内就无需再次更新(而且 Expo 的每个版本都比上一个更好!)。

🛠 API 改进和添加

新的更新模块 API

作为 ExpoKit → Bare 工作流迁移的一部分,我们发布了expo-updates一个新模块,允许在 React Native 裸应用中加载无线更新。您可以将此模块与任何实现了 Expo 协议的服务器一起使用。我们还提供更新服务,作为开发者服务的一部分,您可以选择使用。

这个新库可以在托管工作流项目和裸工作流项目中使用。JS 模块的 API 与软件包Updates中包含的模块类似,但略有不同expo。在 SDK 37 中您仍然可以使用,但我们会在 SDK 38 中移除此模块,因此您应该尽快import { Updates } from 'expo';切换到新模块。expo-updates

要在托管工作流或裸工作流项目中使用新的更新 API,请按照文档中的设置说明进行操作。API 的更改如下:

  • Updates.fetchUpdateAsync不再接受任何参数。(更新下载完成后,它仍然会解析。)
  • 中的监听器Updates.addListener将仅接收有关自动下载的更新的事件,而不会接收由 手动触发的下载Updates.fetchUpdateAsync
  • 事件名称已更改。
  • Updates.reloadFromCache已重命名为Updates.reloadAsync,并且Updates.reload已被删除。

零食改进

  • 使用 iframe 消息替换网络流量,以便更快、更可靠地更新 Web 运行时
  • 从快餐运行时中删除了与 Expo 客户端捆绑的大多数模块,以便更快地加载 Web 运行时并选择特定版本
  • 修复 Web 运行时有时会出现错误消息的问题RegeneratorRuntime is not defined
  • 修复了某些带有 TypeScript 定义的包被错误捆绑的问题

其他修复和改进

此版本还包含许多其他更改!查看我们的更新日志中的完整列表。

库更新和重大变化

从历史上看,我们已经在发行说明中列出了这些内容;现在您可以在我们的变更日志中查看它们

⬆️ 升级你的应用

以下是将您的应用从 36.0.0 升级到 Expo SDK 37.0.0 的方法:

  • 在您的项目目录中运行expo upgrade(需要最新版本的expo-cli,您可以使用更新npm i -g expo-cli)。
  • 请务必检查变更日志以了解其他重大变更!
  • 从 App Store / Google Play 更新您手机上的 Expo 应用程序。expo-cli如果您删除现有应用程序,将自动在模拟器中更新您的应用程序,或者您可以运行expo client:install:iosexpo client:install:android
  • 如果您之前构建过独立应用,请记住您需要创建一个新的版本来更新 SDK 版本。当您准备好构建新版本并提交到商店时,请运行expo build:ios和/或 。expo build:android

将 ExpoKit 更新至 SDK 37

  • 按照文档中给出的说明进行操作。
  • 请记住,SDK 38 将是 ExpoKit 的最终更新。要了解更多信息,包括我们的迁移建议,请参阅此博客文章

🗣 如果您有一般性问题或意见,请在我们的社区论坛分享!我们也欢迎在Github上提交问题报告(当然还有 PR)

文章来源:https://dev.to/expo/expo-sdk-37-is-now-available-69g
PREV
Expo SDK 39 现已推出⚡️ 新的 SDK 功能📱 Expo 开发客户端应用程序📝 文档改进🍩 Snack 改进🐛 Bug bash🌐 Expo CLI⚠️ 网络上的服务工作者现已选择加入🧹 放弃 SDK 35,将在下一个版本中放弃 SDK 36 升级您的应用
NEXT
DynamoDB 备忘单 – 2020 年 AWS Certified Developer Associate 认证所需了解的关于 Dynamo DB 的一切