发布更新

编辑页面


For the complete documentation index, see llms.txt. Use this Use this file to discover all available pages.

本文档已于 2022 年 8 月归档,且不会再收到任何进一步更新。请改用 EAS Update。了解更多

在开发项目时,你是在自己的电脑上编写代码,而当你使用 Expo CLI 时,服务器和 Metro bundler 会在你的机器上运行,并将你的所有源代码打包后通过一个 URL 提供访问。你正在开发的项目的 URL 可能看起来像这样: exp://i3-kvb.ccheever.an-example.exp.direct:80

exp.direct 是我们用于隧道转发的域名,因此即使你位于 VPN 或防火墙之后,只要互联网上的任何设备拥有你的 URL,就应该能够访问你的项目。这会让你更容易在手机上打开项目,或者把它发送给与你协作、但不在同一局域网中的其他人。

但由于 bundler 和开发服务器都运行在你的电脑上,如果你关闭笔记本电脑或停止 Expo CLI,就无法再通过该 URL 加载你的项目。“Publish” 是我们用于部署项目的术语。它会将你的项目发布到一个持久的 URL,例如 https://expo.dev/@community/native-component-list,可通过 Expo Go 应用打开。它还会将你应用中的所有图片、字体和视频上传到 CDN(在这里阅读更多内容)。

如何发布

要发布项目,请运行 expo publish。无需任何设置,你可以直接创建一个新项目并在不做任何更改的情况下发布它,你会看到它可以正常工作。

当你这样做时,bundler 会压缩你的所有代码,并生成两份代码版本(一个用于 iOS,一个用于 Android),然后将它们上传到 Expo 提供的免费托管服务。你会得到一个类似 https://exp.host/@ccheever/an-example 的链接,任何人都可以通过它加载你的项目。

如果你还没有优化你的资源,在运行 expo publish 时系统会提示你,询问你是否愿意这样做。这与运行 npx expo-optimize 具有相同效果,并且会压缩你项目中的所有 PNG 和 JPEG 文件。

每当你想要部署一次更新时,再次点击 publish,新的版本会在用户下次打开时立即可用。

我的用户会得到什么版本的应用?

你的用户将获得推送到某个 发布通道 的最近一次兼容发布。影响兼容性的因素包括:

  • sdkVersion(独立应用只构建为支持单一 SDK 版本)
  • platform
  • releaseChannel

下面的流程图展示了我们如何确定返回给用户的是哪个发布版本:

部署到 App Store 和 Play Store

当你准备将应用分发给最终用户时,你可以创建一个独立应用二进制文件(ipa 或 apk 文件),并将其发布到 iOS App Store 和 Google Play Store。

独立应用会知道去你应用已发布的 url 中查找更新,如果你发布了更新,那么用户下次打开应用时,他们会自动下载新版本。

将资源上传到 CDN

为了让资源被上传到 CDN,它们必须在应用代码中的某处被显式 require。条件性地 require 资源会导致 Metro bundler 无法检测到它们,因此在你发布项目时,它们不会被上传。

限制

某些原生配置无法通过发布更新

如果你在 app.json 中进行了以下任一更改,则需要重新构建应用的二进制文件,变更才会生效:

  • 提升 Expo SDK 版本
  • 更改 iosandroidnotification 键下的任何内容
  • 更改应用的 splash
  • 更改应用的 icon
  • 更改应用的 name
  • 更改应用的 owner
  • 更改应用的 scheme
  • 更改你的 facebookScheme
  • 更改 assetBundlePatterns 下打包的资源

此外,修改 Firebase 配置文件(google-services.json 和 GoogleService-Info.plist)中各项键值,也需要重新构建二进制文件后,变更才会在 iOS 或 Android 独立应用中生效。

在 iOS 上,你不能分享你发布后的链接

当你发布时,任何 Android 用户都可以立即在 Expo Go 中打开你的应用。

由于 Apple 施加的限制,分享已发布应用的最佳方式是使用 Expo 的构建服务生成原生二进制文件。你可以使用 Apple TestFlight 与测试人员分享应用,也可以将其提交到 iTunes Store 以扩大分发范围。

隐私

你可以在 app.json 配置文件中通过将键 "privacy" 设置为 "public""unlisted" 来设置项目的隐私。

这些选项的工作方式与 YouTube 上类似。未列出的项目 URL 会是保密的,除非你告诉别人或与他们分享。公开项目可能会展示给其他开发者。

我该如何移除一个我已发布的受管理 Expo 项目?

受管理应用的默认隐私设置是 unlisted,因此除非你把链接分享给别人,否则没人能找到你的应用。

如果你真的想让你已发布的应用“取消发布”,请查看我们的 高级发布通道 指南,其中解释了如何回滚。