发布渠道
编辑页面
For the complete documentation index, see llms.txt. Use this Use this file to discover all available pages.
本文档已于 2022 年 8 月归档,且不会再收到任何进一步更新。要了解为何发布通道已被弃用,请参阅我们关于 EAS Update 的博文。我们建议改为使用 EAS Update。
简介
在 Expo 中使用发布通道,可以通过向用户提供一个 URL 或配置你的独立应用,来向他们推送应用的不同版本。如果你有以下情况,应使用发布通道:
- 你有一个已上线的应用,并且需要一个测试环境。
- 你有多个版本的应用。
使用发布通道发布
通过运行以下命令,在某个发布通道上发布你的更新:
# 发布到发布通道 <your-channel>- expo publish --release-channel <your-channel>你的团队可以在 Expo Go 应用中看到这个发布通道,方式是使用带参数的 URL https://exp.host/@username/yourApp?release-channel=<your-release-channel>。如果你不指定发布通道,你将发布到 default 通道。
发布通道名称只能包含小写字母、数字以及特殊字符 ., _ 和 -。
使用发布通道构建
在 eas.json 中的构建配置里设置你的发布通道:
{ "build": { "your-build-profile": { "releaseChannel": "your-channel" } } }
然后,使用 EAS CLI 运行 eas build --profile <your-build-profile> 来构建你的独立应用。生成的二进制文件只会拉取在指定发布通道下发布的版本。如果你不指定发布通道,你的二进制文件将从 default 发布通道拉取版本。
从代码中访问通道
你可以通过 expo-updates 中的 Updates.releaseChannel 字段访问更新所发布到的发布通道。
在 Expo Go 的开发环境中,
Updates.releaseChannel始终为'default'。
示例工作流
假设你有一个用于在 Expo Go 中测试的 Staging 栈,以及一个用于通过 TestFlight 发布并最终推进到 App Store 的 Production 栈。
在 staging 栈上,运行 expo publish --release-channel staging。你的测试用户可以通过在 URL 的查询参数中指定发布通道(即)https://exp.host/@username/yourApp?release-channel=staging 来查看应用的 staging 版本,然后在他们的网页浏览器中打开该 URL,最后使用 Expo Go 应用扫描二维码。或者,他们也可以直接在移动设备上打开该 URL。
在 production 栈上,通过运行 expo publish --release-channel prod-v1 发布你的应用 v1。你可以通过运行 eas build --platform ios --profile prod,并在 eas.json 中 prod 构建配置里将 releaseChannel 设置为 prod-v1,将这个版本构建为一个独立 ipa:
{ "build": { "prod": { "releaseChannel": "prod-v1" }, "staging": { "releaseChannel": "staging" } } }
你可以通过发布到 prod-v1 发布通道来向你的应用推送更新。独立应用会使用 prod-v1 发布通道上最新的兼容版本进行更新。
如果你有一个新版本,不想让 v1 用户收到,可以通过运行 expo publish --release-channel prod-v2 发布应用 v2,将你的 prod 构建配置中的 releaseChannel 设置为 prod-v2,然后再次运行 eas build --platform ios --profile prod 进行构建。只有带有 prod-v2 ipa 的用户才会从该发布通道拉取版本。
你可以继续使用 expo publish --release-channel prod-v1 更新你应用的 v1 版本,而那些尚未在 Apple App Store 中更新到最新 prod-v2 ipa 的用户,将继续收到最新的 prod-v1 发布内容。
在裸工作流中使用发布通道
你可以通过修改 Expo.plist(iOS)中的 EXUpdatesReleaseChannel 键,或 AndroidManifest.xml(Android)中的 releaseChannel meta-data 标签值,来编辑原生项目的发布通道。阅读本指南 了解更多关于在裸应用中配置更新的信息。
使用发布通道进行环境变量配置
环境变量并不会显式存在,但你可以利用发布通道来实现这一点!
假设你有如下发布构建的工作流:
# 发布到发布通道 prod-v1expo publish --release-channel prod-v1# 发布到发布通道 prod-v2expo publish --release-channel prod-v2# 发布到发布通道 prod-v3expo publish --release-channel prod-v3# 发布到发布通道 staging-v1expo publish --release-channel staging-v1# 发布到发布通道 staging-v2expo publish --release-channel staging-v2你可以创建一个函数来查找特定发布并相应地调整应用行为:
import * as Updates from 'expo-updates'; function getEnvironment() { if (Updates.releaseChannel.startsWith('prod')) { // 匹配 prod-v1、prod-v2、prod-v3 return { envName: 'PRODUCTION', dbUrl: 'ccc', apiKey: 'ddd' }; // 生产环境设置 } else if (Updates.releaseChannel.startsWith('staging')) { // 匹配 staging-v1、staging-v2 return { envName: 'STAGING', dbUrl: 'eee', apiKey: 'fff' }; // 预发布环境设置 } else { // 假定任何其他发布通道都是开发环境 return { envName: 'DEVELOPMENT', dbUrl: 'aaa', apiKey: 'bbb' }; // 开发环境设置 } }