如何使用发布渠道将Expo应用程序发布到App Store

不再需要每次创建和上传新版本。 这样,您就可以避免再次经历App Store漫长而痛苦的审核过程。

在2017年,当我开始使用Expo为自己开发应用程序时,我想要做的就是在App Store和Play Store上直播一个应用程序。

我当时认为是最快的方法是Git push master branch,没有分支,没有拉取请求,没有登台ENV ...当应用程序准备好后,我不得不使用Expo CLI为Apple和Android搭建它。 最后,通过我的.apk.ipa ,我可以通过对App Store和Play Store进行漫长而紧张的审查过程来发布它(这是另一个主题) 它奏效了...

如何使用发布渠道将Expo应用程序发布到App Store_第1张图片

几天后,假设我有一个要修复的错误或要添加的功能。 我最近怎么样? 我必须再次重复相同的过程...所以我正在做更改,继续使用master,构建独立的应用程序,然后将其提交给商店,以便几天后用户可以看到新版本(前提是App Store的评论被接受)。 哦,他们只有在手机上更新了我的应用后,才能看到更改!

但是,请稍等...事实并非如此。 用户可以立即访问新版本。 那怎么可能?

我做了一些谷歌搜索,然后发现了OTA更新 (OTA代表Over The Air)。 那是什么?

这就是世博会所说的 :

OTA更新允许您发布新版本的应用程序JavaScript和资产,而无需构建新版本的独立应用程序并重新提交给应用商店

哇,好,那对我来说真是新东西! 因此,Expo告诉我要在我的应用程序上进行更改,我只需编写一个命令,人们就会立即看到它? 当您通常需要等待几天才能(可能)获得批准时,这似乎是一个梦想!

OTA如何运作? 简而言之,您可以在javascript应用中进行所需的任何更改,只需编写expo publish命令。 然后,您的应用将被缩小,并且您的代码的2个版本(iOS和Android)将被上传到Expo CDN。

好的,但是这与我的用户手机上的应用程序有什么关系? 好问题! Expo在文档中写的是:

默认情况下,Expo将在您启动应用程序时自动检查更新,并尝试获取最新发布的版本。 如果有可用的新捆绑包,Expo将在尝试启动体验之前尝试下载它。

而已! 每次用户打开应用程序时,Expo都会检查并获取您使用expo publish命令上传的代码的最新版本( 此处有更多详细信息 )! 因此,无需上载新的独立应用程序版本,也无需为每个商店再次进行审核! ( 但是,您可以在此处找到一些例外 )

对我来说,这个发现令人震惊! 我立即开始使用它! 修复某些问题并直接在用户的手机上看到它真是一种荣幸!

如何使用发布渠道将Expo应用程序发布到App Store_第2张图片

好的,朱利安,但是发行频道呢?

让我们回到他们身边! 我如何遇到发行渠道,为什么OTA更新本身对我来说还不够? 一年前,我有一个针对客户的自由项目。 这是一个已经在商店中发布的应用程序,需要通过添加一些功能/设计和错误修复来进行改进。 他们还需要一种方法来查看我正在开发的版本,例如分阶段的ENV(目前暂时没有)。

我无法编写expo publish向他们展示WIP,因为它会影响用户。 那就是我遇到发行渠道的时候! 您可以将它们想像成可以在其中上传应用程序的不同服务器,每个服务器都有一个特定的名称。 因此,例如,当您编写expo publish ,您还可以添加--release-channel 标志(例如: expo publish --release-channel staging ),这样,您的应用程序便会发布到该特定频道。 您可以根据需要添加任意数量的频道。

想象一下这个简单的工作流程:

  • 应用的生产版本,可在--release-channel production
  • --release-channel staging可用的暂存版本

但是,用户将如何在手机上获得正确的版本?

假设您要构建一个应用程序并将其上传到商店,您可以执行expo build:androidexpo build:ios ,对吗? 默认情况下,Expo将自动为您添加一个默认频道。
还记得OTA更新吗? 因此,新生成的二进制文件将仅提取通过default通道发布的更新。

这样,每次您使用expo publish (不指定通道)发布应用程序时,expo都会在default通道上发布它,并且您的用户将有权访问新版本。

我们还可以通过添加不同的渠道来改善此工作流程! 从现在开始,而不是没有指定频道的发布,你可以发布一个production的应用版本与命令expo publish --release-channel production

这个新版本将订阅production频道并收听新的更新。
您只需要在第一时间将其上传到商店。

现在,假设您想使用新版本的应用程序并将其展示给一些测试用户,而不会与实时production版本混淆。
您只需要创建另一个频道,例如expo publish --release-channel staging并构建一个新的二进制文件即可订阅该特定的staging信道 例如, 您可以在 Testflight 上上传此版本, 并且每次您要在这个频道,您的Testflight用户将可以看到“进行中的工作!”对于Android,您可以将此二进制文件上传到 测试版本中

如何使用发布渠道将Expo应用程序发布到App Store_第3张图片

当您对登台应用程序感到满意时,无需创建新的构建版本。 您可以通过促进释放到一个新的通道上部署生产应用程序的更改。

什么!? 每次发布应用程序时,都会创建两件事:

由Android和iOS平台的publicationId标识的版本。 发布是指发布时捆绑的源代码和资产。
到登台通道中版本的链接,由channelId标识。 这就像在git分支上的提交。

为了查看您已发布的所有内容,只需执行expo publish:history 您将看到如下内容:

让我们回到促销活动! 如果你想推广你的staging应用到production一个,你只需要确定的publicationId要促进和做expo publish:set --publish-id --release-channel production

就是这样,您的更改现在已经投入production 您可以再次执行expo publish:history来查看频道已更改!

如果您向这样做的用户添加了较大的回归,该怎么办?
无需担心,只需回滚执行expo publish:rollback --channel-id promotion频道expo publish:rollback --channel-id (请注意,回滚channelId ,而不是publicationId )!

就是这么简单,您的发行版将返回到staging频道:)

您可以想象任何适合您需求的工作流程,例如具有多个production渠道的工作流程,这些production渠道对应于您应用程序的不同版本,您可以在其中分别维护每个版本!

还有一件事!

既然您已经了解了有关发行渠道的所有知识,那么直接在代码中访问渠道又如何呢?

例如,这可以用于基于通道设置ENV变量。 您可以在清单对象的releaseChannel字段中访问此信息。

这是Expo的示例:

您可以创建一个查找特定版本并设置正确变量的函数。
function getApiUrl ( releaseChannel )  {
  if (releaseChannel === undefined ) return App.apiUrl.dev // since releaseChannels are undefined in dev, return your default.
  if (releaseChannel.indexOf( 'prod' ) !== -1 ) return App.apiUrl.prod // this would pick up prod-v1, prod-v2, prod-v3
  if (releaseChannel.indexOf( 'staging' ) !== -1 ) return App.apiUrl.staging // return staging environment variables
}

如果您想了解更多有关发行渠道的信息,请邀请您阅读Expo文档: 发行渠道和高级发行渠道 。

顺便说一句,如果您有任何疑问或我错过了什么,请随时在下面的评论中告诉我!

如果您对我的下一篇文章感兴趣,请不要忘记在这里关注我;)

先前发布在https://dev.to/jcoulaud/how-to-publish-an-expo-app-to-the-stores-with-release-channels-1e3n

From: https://hackernoon.com/how-to-publish-your-expo-application-to-the-app-stores-using-release-channels-un7a32ms

你可能感兴趣的:(如何使用发布渠道将Expo应用程序发布到App Store)