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 客户端都拥有一个全新、更友好、信息更丰富、外观更美观的开发者菜单!你可以在开发模式下通过摇晃设备来激活它,一如既往。
🔥 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.json
或expo.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
:我们已决定将其用作root
SPA 根元素的 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:ios
并expo client:install:android
。 - 如果您之前构建过独立应用,请记住您需要创建一个新的版本来更新 SDK 版本。当您准备好构建新版本并提交到商店时,请运行
expo build:ios
和/或 。expo build:android
将 ExpoKit 更新至 SDK 37
🗣 如果您有一般性问题或意见,请在我们的社区论坛分享!我们也欢迎在Github上提交问题报告(当然还有 PR)。
文章来源:https://dev.to/expo/expo-sdk-37-is-now-available-69g