使用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发电机!
有任何疑问吗?
如果您对本教程有任何疑问,评论或任何问题,请随时使用下面的评论部分! 😉