使用Fastlane自动将React Native App部署到应用商店

手动将React Native应用程序部署到商店可能会很痛苦。 这很耗时,容易出错,而且不适合初学者。 幸运的是,Fastlane可帮助您自动化该过程。

本文将说明在React Native应用的特定情况下如何使用Fastlane。 要快速开始使用Fastlane,请参阅本教程。

首先,我们需要设置一些内容。

设置您的React Native应用

向您的React Native应用添加图标

Apple要求您为应用程序添加图标,因此请确保在项目中添加了图标。 了解如何在单个命令行中生成React Native应用程序图标。

设置您的捆绑包标识符

确保在XCode的“ 常规”选项卡上更改包标识符。

不要让XCode管理您的React Native应用的签名

  • 仅在XCode 8上的“ 常规”选项卡中,取消选择“自动管理签名”:
  • 对于所有XCode版本,在“ 构建设置”选项卡中的“ 签名 下,将iOS开发人员设置为调试代码签名身份,并将iPhone发行版本设置为发行代码签名身份。

让魔术开始

创建Fastlane配置

为了在iOS上轻松进行设置,请将CD放入React Native应用的ios文件夹中:

cd ios 

并运行:

 fastlane init 

Fastlane将询问有关React Native应用程序的一些信息,并自动为您创建一个fastlane文件夹。

当要求确认值时,回答n 。 Fastlane尚未猜到您的React Native应用程序标识符,需要一些帮助。

然后,Fastlane将在Apple开发人员中心和iTunes Connect上自动创建您的React Native应用程序。 整洁,不是吗? 在iTunes Connect上创建它可能需要几分钟。

当要求一个scheme ,您必须输入React Native项目的名称。 例如,我使用react-native init AwesomeProject启动了我的React Native应用程序,因此我的方案名称为AwesomeProject

而已! 现在,您已经为React Native应用程序设置了Fastlane配置文件夹。

您应该拥有一个Appfile其中包含有关您的应用的特定信息,例如:

  app_identifier“ tech.bam.alex.fastlane.awesomeproject”#应用程序的捆绑包标识符 
apple_id“ alexandre@bam.tech”#您的Apple电子邮件地址
  team_id“ Z445H6455F”#开发人员门户网站团队ID 

检出ios/fastlane/Fastfile ,您应该为应用商店设置一个通道:

  desc“将新版本部署到App Store” 
车道:release do
#匹配(类型:“ appstore”)
#快照
Gym(方案:“ AwesomeProject”)#构建您的应用-可用的更多选项
传递(力:真)
#frameit
结束

是! 我们接近了! 您可以在fastlane ios release运行它,但我们仍然需要为Codesigning设置匹配项。

设置比赛

Match非常适合处理您的团队证书和配置文件。 它将为您存储在一个私人git仓库中。 有关更多信息,请参见fastlane代码签名指南。

如果尚未创建私有存储库,则可以进行match 。 Bitbucket是众所周知的免费选项。

然后像这样更改您的release通道:

  desc“将新版本部署到App Store” 
车道:release do
#取消注释匹配并添加git_url
比赛(
类型:“ appstore”,
#使用您自己的存储库!
git_url:“ https://bitbucket.org/Almouro/awesome-certificates”

Gym(方案:“ AwesomeProject”)#构建您的应用-可用的更多选项
传递(力:真)
结束

现在,此设置可与XCode 7一起使用。但是,对于XCode 8,通过运行fastlane ios release ,您现在将遇到可怕的错误:

 Code signing is required for product type 'Application' in SDK 'iOS 10.0' 

处理XCode 8

我们必须专门告诉XCode使用哪个团队和配置文件来构建您的React Native应用。

简单的方法

在您的部署通道中,取消注释除match步骤之外的所有内容,以为您的React Native应用程序创建和检索配置文件。 然后,您可以在XCode的“ 常规”选项卡下选择它:

不要忘记将更改提交到React Native应用程序的XCode项目。

编码方式

我们还可以通过在gym添加xcargs来在Fastfile选择包含代码的团队和配置文件:

 gym( 
scheme: 'MyAwesomeApp',
xcargs: "PROVISIONING_PROFILE_SPECIFIER='639b81fa-c63e-4127-a4ef-3e2b73de2033' DEVELOPMENT_TEAM='58628H666T'"
)

当然,您可以在Appfile找到开发团队,但是我真的不想指定配置文件的uuid。 幸运的是, match导出一个环境变量以便轻松检索它。

假设您的应用程序标识符是com.myawesome.app ,并且正在为appstore构建React Native应用程序,那么sigh_com.myawesome.app_appstore将是一个环境变量,其中包含您的配置文件uuid。 Fastlane文档提供了更多信息

然后,您可以将上述代码替换为:

 gym( 
scheme: 'MyAwesomeApp',
xcargs: "PROVISIONING_PROFILE_SPECIFIER='#{ENV[\'sigh_com.myawesome.app_appstore\']}' DEVELOPMENT_TEAM='58628H666T'"
)

为了进一步改善这一点,您实际上可以使用以下方法从Appfile检索值:

 # Fetching app identifier 
CredentialsManager::AppfileConfig.try_fetch_value(:app_identifier)

现在的代码变为:

 team_id = CredentialsManager::AppfileConfig.try_fetch_value(:team_id) 
app_identifier = CredentialsManager::AppfileConfig.try_fetch_value(:app_identifier)
profile = ENV["sigh_#{app_identifier}_appstore"]
gym(
scheme: 'MyAwesomeApp',
xcargs: "PROVISIONING_PROFILE_SPECIFIER='#{profile}' DEVELOPMENT_TEAM='#{team_id}'"
)

收获奖励

现在,您应该拥有一条大致如下所示的车道,具体取决于您选择处理XCode 8的选项。

  desc“将新版本部署到App Store” 
车道:release do
比赛(
类型:“ appstore”,
git_url:“ https://bitbucket.org/Almouro/bamlab-certificates”

sh“ printenv”
team_id = CredentialsManager :: AppfileConfig.try_fetch_value(:team_id)
app_identifier = CredentialsManager :: AppfileConfig.try_fetch_value(:app_identifier)
个人资料= ENV [“ sigh _#{app_identifier} _appstore”]
sh“ echo sigh _#{app_identifier} _appstore”
健身房(
方案:“ AwesomeProject”,
xcargs:“ PROVISIONING_PROFILE_SPECIFIER ='#{profile}'DEVELOPMENT_TEAM ='#{team_id}'”

传递(力:真)
结束

 fastlane ios release 

并获得奖励!

您团队中的任何人现在都可以使用此命令将您的React Native应用程序部署到应用程序商店。

现在,您可以在iTunes Connect中选择内部版本并将其提交以供审阅。

自动化所有事情

在BAM,我们定期启动新的React Native项目。 我们觉得这个设置还很长,请查看我们为您执行这些步骤而构建的Yeoman发电机!

有任何疑问吗?

如果您对本教程有任何疑问,评论或任何问题,请随时使用下面的评论部分! 😉