Expo SDK 39 现已推出⚡️ 新的 SDK 功能📱 Expo 开发客户端应用程序📝 文档改进🍩 Snack 改进🐛 Bug bash🌐 Expo CLI⚠️ 网络上的服务工作者现已选择加入🧹 放弃 SDK 35,将在下一个版本中放弃 SDK 36 升级您的应用

2025-06-05

Expo SDK 39 现已发布

⚡️ 新的 SDK 功能

📱 Expo 开发客户端应用程序

📝 文档改进

🍩 零食改进

🐛 漏洞清理

🌐 Expo CLI

⚠️ Web 上的 Service Worker 现已可选

🧹 放弃 SDK 35,下一版本将放弃 SDK 36

升级您的应用

今天,我们宣布发布 2020 年的第三个版本:Expo SDK 39。SDK 39 为我们的整套工具带来了大量质量改进:Expo 开发客户端、Expo CLI文档,当然还有我们的SDK。继续阅读了解更多详情!

🐛 已知回归(2020 年 10 月 3 日更新)

我们注意到的已知重大回归问题已得到解决。点击此处了解更多信息,感谢您的耐心等待!

⚡️ 新的 SDK 功能

支持 iOS 14、React Native 0.63 和 React Native for Web 0.13!

  • SDK 39 与新发布的 iOS 14 完全兼容。之前使用 SDK 38 构建的应用程序应该也能在 iOS 14 上良好运行,但我们建议您尽可能保持更新。
  • 它还支持 React Native 0.63版本,让您能够充分利用全新设计的 LogBox、Pressable 组件以及原生颜色支持等功能。点击此处了解更多关于 React Native 0.63 的信息
  • 终于,SDK 39 从 Web 版本 v11 升级到了 v13! RNW 13 使用了 React 16.13.1,它将消除开发者在 Web 上看到的一系列与生命周期方法相关的警告。

交互式通知expo-notifications

我们在新库中新增了对通知类别(也称为交互式通知)的支持expo-notifications!类别允许您发送用户无需打开应用即可进行交互的通知,并根据用户与通知的交互方式执行相应操作。以下是 Android 和 iOS 平台上的实际操作示例:

Android 手机和 iPhone 上并排演示交互式通知

这项最新功能expo-notifications现已具备旧版通知模块的所有功能(甚至更多!),因此我们强烈建议您进行迁移。(旧版模块在 SDK 39 中仍然可用,但不久的将来会被移除。)如需了解更多信息,请阅读文档

网页二维码扫描

您现在可以使用 从您的网络应用程序扫描二维码expo-camera

演示某人使用手机扫描笔记本电脑上的 Web 应用中的二维码

Google 身份验证会话

我们的通用身份验证模块expo-auth-session现已内置 Google 登录支持。设置速度更快,代码量更少。点击此处了解更多信息。

import { useAuthRequest } from 'expo-auth-session/providers/google';

const [request, response, promptAsync] = useAuthRequest({
  expoClientId: '...',
  iosClientId: '...',
  androidClientId: '...',
  webClientId: '...',
});
Enter fullscreen mode Exit fullscreen mode

屏幕捕获监听器expo-screen-capture

在 SDK 38 中,我们添加了expo-screen-capture模块,允许您阻止应用程序的屏幕截图和屏幕录制。

有时您不想阻止屏幕截图,但您在用户截取特定屏幕时执行某些操作(咳咳,@Snapchat)——因此在 SDK 39 中,我们添加了ScreenCapture.addScreenshotListener允许开发人员执行此操作的功能。

(感谢所有参与我们的功能请求的人,帮助我们确定像这样的所需功能!🙏)

托管工作流中的新更新和闪屏模块

我们已将新的expo-updatesexpo-splash-screenunimodules 集成到托管工作流中。如果您仍从软件包中导入Updates或模块,则升级到 SDK 39 时需要安装单独的 unimodules 软件包。SplashScreenexpo

这项改进带来的一个变化是,您的updatesapp.json 配置现在会在构建时应用,而不是在运行时。我们认为这比尝试通过无线方式更新配置更直观……无线方式。请查看Updates模块文档,了解其他一些 API 的小改动。

请注意,我们尚不支持托管工作流程中的暗模式启动画面(我们正在努力实现这一点!);目前,如果您需要此功能,则需要坚持使用裸工作流程。

新的同步方法expo-random

Random.getRandomBytes()我们为添加了同步方法expo-random。这启用了 的 polyfill crypto.getRandomValues()(例如react-native-get-random-values ),以便像在托管应用中一样使用软件包uuid

实验:react-native-reanimatedv2 alpha 支持

该库的第二个主要版本提供了更简单的 API,并显著提升了性能。它需要您选择进行一些额外的配置才能使用;请参阅我们的文档了解更多信息。

或者,如果您只想创建一个已配置的新应用程序,则可以跳过手动配置步骤:

npx crna --template with-reanimated2
Enter fullscreen mode Exit fullscreen mode

💡 我们仍在努力在 Snack 中支持 react-native-reanimated v2 alpha;这可能会在发布后的几周内推出。

📱 Expo 开发客户端应用程序

同步应用加载

现在,所有项目都会在 iOS 和 Android Expo 开发客户端中同步加载!之前,已发布项目的加载行为基于其updates在 app.json 中的配置;现在,此配置仅适用于独立应用。这意味着,当您开发、测试项目,或向利益相关者展示项目时,您将始终拥有最新版本。

Expo Go 应用程序的屏幕截图,显示正在检查更新状态

此外,我们在加载界面添加了一个指示器,以便为您提供更多关于当前情况的信息。(别担心,这不会显示在您的独立应用中!)如果您想在 Expo 客户端中移除它,只需在"developmentClient": { "silentLaunch": true }app.json 中发布您的项目即可。

新项目详细信息屏幕

长按项目即可查看更多信息。长按需要不受支持的 SDK 版本的项目现在将打开详细信息屏幕,而不是尝试打开项目并显示错误。

项目详情界面交互演示

密码自动填充

使用 iOS 和 Android 上的密码和用户名自动填充功能更快地登录。

手机登录界面自动填写密码的截图

SDK 版本

查看您的项目正在使用的 SDK 版本以及是否需要更新。

项目列表的屏幕截图,其中包含每个项目的 SDK 版本信息

📝 文档改进

我们的文档最近焕然一新!大部分改动都很细微,但我们希望它们能让您的阅读体验更加轻松愉悦。它们也会让您感觉更像expo.io网站的一部分。升级到 SDK 39 时,请务必查看这些改动。

带有右侧边栏目录的 API 页面的屏幕截图

我们还在“指南”“API 参考”页面添加了右侧边栏,用于显示这些页面的目录。如果您像我们一样,经常使用 ⌘/Ctrl+F 来浏览参考文档,那么这可以帮助您快速了解整个页面,并直接跳转到所需内容。

🍩 零食改进

Snack 现在会检查所有 TypeScript 和 JavaScript 文件中是否存在 lint 错误。您可以在文件资源管理器中轻松查看需要关注的文件,甚至可以从“问题”选项卡直接跳转到错误所在位置:

Snack 项目中跳转错误的演示

🐛 漏洞清理

为了庆祝 SDK 38 的发布,我们组织了一次内部“bug 清理”活动,深入研究了 Expo 和 Expo CLI 代码库中的 GitHub 问题。整个 7 月份,我们解决了大家发现并提交的 420 多个问题,并将每日问题数量减少了 20% 以上。我们要感谢每一位提交高质量问题的人们,感谢他们帮助我们改进 Expo。

我们在 bug bash 中发现的一些最显著的改进来自expo-av。iOS 上的背景音频更加可靠,我们提升了两个平台的稳定性和内存使用率,并解决了许多其他 bug 和极端情况。此外,我们还修复了整个 SDK 中的许多问题:几乎每个软件包都至少被修改过一次!您可以在变更日志中查看完整的变更列表。

Android 权限

作为 bug 清理的一部分,我们还对原生 Android 权限的处理方式进行了全面审核。根据您的反馈,我们更新了权限文档,以便更好地阐述每个模块的必需权限和可选权限。我们还添加了更多关于不同平台上权限行为的上下文信息。如果您仍有疑问,或者对独立应用中的权限机制不确定,欢迎随时在我们的论坛提问!

🌐 Expo CLI

此版本为我们的整个 CLI 带来了大量功能和用户体验改进。以下是其中一些有趣的改进!

程序化访问

个人访问令牌允许您expo在 CI 或脚本中执行任何操作(登录和退出除外),而无需共享您的个人凭据。您可以为每项服务生成单独的令牌,监控其使用情况,并在您的凭据不幸被盗时禁用单个令牌。

选择设备

您现在可以选择在哪个设备或模拟器上运行您的应用程序。

运行后expo start,按:

  • shift+i选择 iOS 模拟器
  • 按 Shift+a选择已连接的 Android 设备或模拟器。您还可以同时在多台 Android 设备上运行您的项目。

通过 Expo CLI 选择模拟器或仿真器设备的演示

Apple Keychain 支持

现在,每次构建或上传 iOS 应用时,您都无需再输入 Apple ID 邮箱地址了!系统会根据您上次输入的邮箱地址推荐 Apple ID,只需按 Enter 键即可再次使用。

带有 Apple ID 建议的 CLI 屏幕截图

MacOS 用户还可以使用原生 Keychain 在构建和上传 iOS 应用时自动填充密码。此功能可以通过 禁用EXPO_NO_KEYCHAIN=true点击此处了解更多信息

Expo CLI 中密码自动填充提示的屏幕截图

发布统计数据

当发布到 Expo 的托管服务(通过expo publish)时,您现在可以查看每个平台的 JavaScript 包大小。更小的包意味着更快的启动时间。要查看完整的大小细分,请使用我们的包可视化工具

发布期间显示的捆绑包大小的屏幕截图

新的帮助菜单

运行expo --help显示新设计的菜单:

新帮助菜单的屏幕截图

导出公共 URL 提示

如果您尚未提供,运行expo export将提示您输入。public-url

Expo CLI 提示输入公共 URL 的屏幕截图

弹出改进

我们一直在逐步改进eject,从 SDK 39 开始,当您运行 eject 时,app.json / app.config.js 中的几乎所有配置都将应用于生成的原生项目。最近的一些改进包括:

  • iOS 和 Android 应用程序图标和启动画面支持。
  • iOS 语言环境和 iPad 支持。
  • Android 备份。
  • iOS 和 Android 现已将其 bundle ID 或软件包名称添加到 URI 方案列表中。这反映了其工作原理expo build,并使身份验证 API 的设置更加便捷。

唯一尚未自动应用的属性是 iCloud 权利,您可以在 Xcode 中启用它。

⚠️ Web 上的 Service Worker 现已可选

从 SDK 39 开始,Expo 的 Webpack 配置中不再默认启用离线支持。您可以通过自定义 Webpack 配置来选择启用离线支持和服务工作线程;更多信息请点击此处

🧹 放弃 SDK 35,下一版本将放弃 SDK 36

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

我们的下一个版本计划于 12 月发布,届时我们将放弃对 SDK 36 的支持。如果您的项目在 SDK 36 上运行,请考虑在未来几个月内升级到较新版本。

升级您的应用

托管工作流

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

  • 在您的项目目录中运行expo upgrade(需要最新版本的expo-cli,您可以使用更新npm i -g expo-cli)。
  • 如果您从软件包中导入SplashScreen或模块,请改为从/ packages安装并导入。(有关其他细微的 API 变更,请参阅更新文档。)Updatesexpoexpo-splash-screenexpo-updates
  • 请务必检查变更日志以了解其他重大变更!
  • 请注意,SDK 39 的 iOS 和 Android 开发客户端存在两个已知问题;一个与SplashScreen 警告有关,另一个与按两次“r”重新加载项目有关
  • 从 App Store / Google Play 更新您手机上的 Expo 应用程序。expo-cli如果您删除现有应用程序,将自动在模拟器中更新您的应用程序,或者您可以运行expo client:install:iosexpo client:install:android
  • 如果您之前构建过独立应用,请记住您需要创建一个新的构建版本来更新 SDK 版本。当您准备好构建新版本并提交到商店时,请运行expo build:ios和/或 。expo build:android

裸工作流程

Bare 工作流程允许您独立于 Expo SDK 周期进行操作,随时随地更新 RN 版本和各个 Expo 包的版本。但是,如果您现在就想更新所有内容:


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

文章来源:https://dev.to/expo/expo-sdk-39-is-now-available-1lm8
PREV
创造穿越太空的效果
NEXT
Expo SDK 37 现已发布