App的分发测试(四) —— fastlane自动化打包(一)

版本记录

版本号 时间
V1.0 2019.03.02 星期六

前言

我们在做App开发的时候,开发人员开发完成以后就要交给QA进行测试了,有几种方式,一种就是将QA的测试机加到账号里面的Device里面,这个有个数限制(每种硬件类型不能超过100台,即使删除设备也不会重置),然后利用三方平台比如说蒲公英进行分发,还有一种方法就是使用TestFlight进行测试,这个专题就主要说一下App分发测试相关的内容。感兴趣的看上面几篇。
1. App的分发测试(一) —— 浅谈蒲公英平台分发测试的使用(一)
2. App的分发测试(二) —— TestFlight集成和分发测试(一)
3. App的分发测试(三) —— fastlane自动化打包并上传(一)

开始

首先看下写作环境

Other, macOS 10.14, Other

这是一个美妙的时刻:你已经花了几天,几周甚至几个月来构建应用程序,它终于准备好与世界分享。您所要做的就是将其提交到App Store。这有多难,对吧?

提示大量的工作:捕获大量的屏幕截图,将您的应用程序添加到Apple DeveloperApp Store Connect网站,上传您的二进制文件和元数据以及其他无意识的工作!哎呀!

有没有更好的方法?如果只有您可以运行单个命令,在所有支持的设备上截取所有屏幕截图,则自动使用每种受支持的语言。如果只有一个命令来上传这些屏幕截图,请将您的应用添加到Apple的开发者网站并提交所有内容。想想你所节省的所有时间!

嗯,你很幸运。感谢创作者Felix Krause和主要维护者Josh Holtz,有一个工具可以完成所有这些以及更多!它被称为fastlane!在本教程中,您将学习如何使用fastlane将应用程序部署到App Store。它一定会成为你最好的新朋友,即使谷歌在2017年通过收购fastlane也与他们建立了关系 acquiring it in 2017。

App的分发测试(四) —— fastlane自动化打包(一)_第1张图片
If sticks were screenshots, this dog would be nearly as helpful as fastlane

注意:本教程假设您拥有付费Apple Developer帐户,以及命令行,Xcode和应用程序提交过程的基本知识。

首先,使用本教程的示例应用程序mZone PokerNo Limit Texas Hold'Em锦标赛的扑克计算器。 它会根据您的筹码数量和当前的大盲注级别显示建议的操作。

在Xcode中打开mZone项目来构建,运行并检查它。

App的分发测试(四) —— fastlane自动化打包(一)_第2张图片

Setting Up fastlane

fastlane工具是Ruby脚本的集合,因此您必须安装正确版本的Ruby。 您的操作系统默认情况下可能会附带Ruby 2.0,但您可以通过打开终端并输入以下内容来确认是否属于这种情况:

ruby -v

如果没有安装,最简单的方法是通过Homebrew为macOS打包管理器。

输入此Terminal命令安装Homebrew

/usr/bin/ruby -e \
  "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

然后,安装Ruby使用:

brew update && brew install ruby

运行brew link --overwrite ruby,如果Homebrew指示您这样做,则打开一个新的终端会话。

您还需要Xcode Command Line Tools (CLT)。 要确保它们已安装,请进入终端:

xcode-select --install

如果已安装Xcode CLT,您将收到以下错误:xcode-select: error: command line tools are already installed, use "Software Update" to install updates。 如果没有,请在出现提示时继续安装。

现在你已准备好安装fastlane! 输入以下命令:

sudo gem install -n /usr/local/bin fastlane --verbose

如果您更喜欢使用Homebrew,请输入以下命令:

brew cask install fastlane

注意:使用El Capitan,OS X引入了系统完整性保护(System Integrity Protection)(也称为Rootless),可防止用户具有root访问权限。 / usr / local / bin仍然是可写的,这就是你在那里安装fastlane的原因。

输入系统密码后,您将在终端中看到一系列活动,表明安装正在进行中。 这可能需要几分钟时间,所以可以喝点咖啡,遛狗或者刷你的僵尸战术。

安装完成后,您就可以在项目中设置fastlane了。 但在此之前,这里是对fastlane工具的高级别介绍。


The fastlane Toolchain

为了发挥其魔力,fastlane将以下一套工具集中在一起:

  • produceApp Store ConnectApple Developer Portal中创建新的iOS应用程序。
  • cert自动创建和维护iOS代码签名证书。
  • sigh创建,更新,下载和修复配置文件。
  • snapshot可自动在每台设备上获取iOS应用的本地化屏幕截图。
  • frameit将您的屏幕截图放入正确的设备框架中。
  • gym构建并打包您的iOS应用程序。
  • deliver将截图,元数据和您的应用程序上传到App Store。
  • pem会自动生成并更新您的推送通知配置文件。
  • spaceship是一个Ruby库,可以访问Apple Developer CenterApp Store Connect API
  • pilot自动化TestFlight部署并管理beta测试人员。
  • boarding邀请beta测试人员。
  • match使用Git匹配整个团队中的同步证书和配置文件。
  • scan会对您的应用运行测试。

您今天将使用其中的几种工具。现在已经足够理论了 - 现在是时候把这个教程付诸实践并进入快车道了!


Adding fastlane to Your Project

打开终端并cdmZone启动项目。 例如,如果您已将mZone_Sample_Project文件夹添加到桌面,则可以输入:

cd ~/Desktop/mZone_Sample_Project/mZone

mZone starter项目设置为工作目录。

接下来,输入:

fastlane init

要初始化fastlane

注意:如果出现permission denied错误,请在此命令前加上sudo

如果在任何时候,fastlane告诉你更新到最新的版本,但运行sudo gem update fastlane输出Nothing to update,也许你正在使用的Ruby管理器不是最新的。 运行gem sources --add https://rubygems.org/来安装Ruby Gems,因为它可能会生成最新的信息。

经过一些输出后,fastlane会问:What would you like to use fastlane for?

App的分发测试(四) —— fastlane自动化打包(一)_第3张图片

虽然fastlane recommend[s] automating one task first,但在本单一教程中您将实施多项自动操作,因此输入4以开始手动设置。 读取输出并在出现提示时按Enter键。

回到mZone文件夹,你会看到一些新东西:Gemfile,它包含fastlane gem作为项目依赖项和fastlane文件夹,包含:

  • Appfile:存储应用程序标识符,Apple ID以及fastlane设置应用程序所需的任何其他标识信息。
  • Fastfile:管理您将创建的用于调用fastlane操作的通道。
App的分发测试(四) —— fastlane自动化打包(一)_第4张图片

在您选择的文本编辑器中打开Fastfile,如果文本编辑器支持智能引号,则禁用智能引号,然后用以下内容替换文件内容:

default_platform(:ios)

platform :ios do
# 1
  desc "Create app on Apple Developer and App Store Connect sites"
# 2
  lane :create_app do
# 3
​    produce
  end
end

如果你以前从未见过Ruby,这对你来说可能就像是胡言乱语。 这是代码的作用:

  • 1) 提供通道lane的描述。 (lane是顺序任务的工作流程)。
  • 2) 将此通道命名为create_app
  • 3) 使用produce将应用程序添加到Developer PortalApp Store Connect

哇噢! 你现在已经创建了你的第一条lane

App的分发测试(四) —— fastlane自动化打包(一)_第5张图片

保存Fastfile,然后打开Appfile。 删除井号(#)以取消注释以apple_id开头的行,然后将[[APPLE_ID]]替换为您的实际Apple ID用户名。 通过立即设置此信息,fastlane将不必在以后反复提示您。

注意:如果您的App Store ConnectApple Developer Portal用户名不同,请将apple_id行替换为:

apple_dev_portal_id("[[APPLE_DEVELOPER_ACCOUNT_USERNAME]]")
itunes_connect_id("[[APP_STORE_CONNECT_ACCOUNT_USERNAME]]")

然后用各自的用户名替换每个用户名占位符。

关闭前保存Appfile

1. Creating Your App

在项目文件夹中打开终端并输入:

fastlane create_app

这将运行您刚刚创建的create_app通道。

你应该看到这样的东西:

App的分发测试(四) —— fastlane自动化打包(一)_第6张图片

在输出的顶部,fastlane建议你在fastlane命令之前加上“bundle exec”,以便在gem包的上下文中更快地启动fastlane。 展望未来,你可以这样做。

如果出现提示,请输入App Store Connect密码。 如果您的Developer Portal有多个团队,请输入与您要用于mZone Poker应用程序的团队相对应的编号。

最终,产品将要求您输入您的bundle ID。 是时候创造了一个!

bundle identifier必须与App Store Connect中曾经使用过的任何其他bundle identifier不同。 尝试使用以下格式输入唯一的包标识符:

com.mZone-Poker.[Insert your email address minus “@” and “.”]

如果已经使用了bundle identifier,请对其进行编辑并重试,直到您提交了唯一ID。

然后,当系统提示您提交应用名称时,它也必须是唯一的。 尝试使用以下格式:

mZone Poker [Insert your email address minus “@” and “.”]

但是,应用程序名称不能超过30个字符,因此必要时会截断。

如果您的App Store Connect帐户有多个团队,请输入与您要使用的团队相对应的编号。

如果您收到任何错误,指出您的Apple Developer帐户存在问题(例如,如果您需要接受新的程序协议),请更正问题,然后再次produce产品。

如果应用程序名称不可用,则该过程将以错误结束。 再次运行produce,重新输入您的Apple ID和您刚创建的相同Bundle ID,然后展开您的创意肌肉以创建唯一ID或返回到此段落的顶部并重复。 我们知道,令人沮丧,但我们相信你会打破无限循环!

App的分发测试(四) —— fastlane自动化打包(一)_第7张图片

登录Apple Developer CenterApp Store Connect。瞧! 您的应用已添加到两者中。 多么酷啊?

App的分发测试(四) —— fastlane自动化打包(一)_第8张图片
Apple Developer (above), App Store Connect (below)

重新打开Appfile,取消注释以app_identifier开头的行,然后将[[APP_IDENTIFIER]]替换为刚创建的bundle ID

如果您之前必须选择一个团队,请添加团队名称,这样您就不必在运行lanes时再次输入该团队。 要指定Developer Portal / App Store Connect团队名称,请添加:

team_name ("[[TEAM_NAME]]")

[[TEAM_NAME]]替换为您队伍的名称。


Generating the Deliverfile

回到终端,输入:

bundle exec fastlane deliver

当fastlane问:“Do you want to setup deliver?”输入y作为回应。

接下来fastlane将会问:“Would you like to use Swift instead of Ruby?”,虽然作为iOS开发人员,你可能更喜欢在Swift工作,但在编写本教程时,fastlane.swift仍处于测试阶段。 因此,输入n以在fastlane文件中使用Ruby

deliver成功完成后,在Finder中导航回mZone / fastlane,您会看到一些新内容:

  • 元数据目录,它将保存应用程序的大部分元数据。
  • Deliverfile,它将包含一些剩余的元数据。
  • 截图目录,其中包含应用截图。
App的分发测试(四) —— fastlane自动化打包(一)_第9张图片

在元数据目录中,您会注意到一系列以常见App Store项目命名的文本文件,如描述,关键字,类别等。fastlane将使用这些文件将您的应用程序的元数据信息提交到App Store Connect

打开en-US / description.txt并添加:

mZone is a simple poker calculator for No Limit Texas Hold 'Em tournaments that displays a recommended course of action based on your chip count and the current big blind level.

keywords.txt中添加

Poker, Cards, Gambling

确认name.txt已包含您的应用名称,然后将https://www.xxx.com添加到privacy_url.txtsupport_url.txt

虽然此应用程序支持法语和英语,但只存在en-US文件夹。 要解决此问题,请在同一目录中复制en-US文件夹并将其命名为fr-FR。 为了保持这个fastlane教程简短,您不必将元数据翻译成法语......这一次。

接下来,在元数据文件夹中:

  • Copyright (c) 2019 Razeware LLC添加到copyright.txt
  • Games添加到primary_category.txt
  • Card添加到primary_first_sub_category.txt
  • Casino添加到primary_second_sub_category.txt

然后,在同一文件夹中,使用您喜欢的文本/代码编辑器创建一个名为app_store_rating_config.jsonJSON文件,其中包含:

{
  "CARTOON_FANTASY_VIOLENCE": 0,
  "REALISTIC_VIOLENCE": 0,
  "PROLONGED_GRAPHIC_SADISTIC_REALISTIC_VIOLENCE": 0,
  "PROFANITY_CRUDE_HUMOR": 0,
  "MATURE_SUGGESTIVE": 0,
  "HORROR": 0,
  "MEDICAL_TREATMENT_INFO": 0,
  "ALCOHOL_TOBACCO_DRUGS": 0,
  "GAMBLING": 2,
  "SEXUAL_CONTENT_NUDITY": 0,
  "GRAPHIC_SEXUAL_CONTENT_NUDITY": 0,
  "UNRESTRICTED_WEB_ACCESS": 0,
  "GAMBLING_CONTESTS": 0
}

该评级配置指示该应用具有frequent/intense模拟赌博(即,value= 2)并且没有其他列出的内容。 此文件为Apple提供了分配适当年龄等级所需的信息。

最后,在review_information文件夹中,将您的电子邮件地址添加到email_address.txt,您的名字为first_name.txt,您的姓氏为last_name.txt,您的电话号码为phone_number.txt。 例如,在电话号码前加上“+”后跟国家/地区代码; +44 844 209 0611

恭喜! 您已添加提交所需的所有元数据。

注意:您可以在此处here找到元数据选项和Deliverfile设置的完整列表。


Automating Screenshots

截图可能很乏味。 您的应用支持的设备和语言越多,您刻录的时间就越多。 痛苦!

mZone Poker支持两种语言和两种iPhone屏幕宽高比。 如果您必须为每种语言和屏幕宽高比拍摄每个设备的五个屏幕截图,那么这将是20个屏幕截图! 但是,使用fastlane,您可以通过运行单个命令来完成所有这些操作。

通过进入终端设置快照项目:

fastlane snapshot init

Snapfile文件现在将出现在fastlane文件夹中。 打开它并用以下内容替换文件的内容:

# 1 - A list of devices you want to take the screenshots from
devices([
  "iPhone 8 Plus",
  "iPhone SE"
])

# 2 - A list of supported languages

languages([
  'en-US',
  'fr-FR'
])

# 3 - The name of the scheme which contains the UI Tests

scheme("mZone Poker UITests")

# 4 - Where should the resulting screenshots be stored?

output_directory "./fastlane/screenshots"

# 5 - Clears previous screenshots

clear_previous_screenshots(true)

在这里,您指定:

  • 1) 您希望fastlane捕获屏幕截图的设备。
  • 2) 您要捕获的本地化语言。
  • 3) 您即将创建的Xcode scheme的名称,用于运行屏幕截图自动化。
  • 4) 屏幕截图输出目录。
  • 5) fastlane应该在捕获新的屏幕截图之前清除输出目录中的任何屏幕截图。

关闭前保存文件。

返回终端并记下运行fastlane snapshot init后出现的说明:

App的分发测试(四) —— fastlane自动化打包(一)_第10张图片

这就是你接下来要做的

1. Creating a Test Target

在Xcode中打开mZone Poker.xcodeproj,然后导航到File ▸ New ▸ Target。 在iOS选项卡的Test部分中,选择iOS UI Testing Bundle,然后单击Next

App的分发测试(四) —— fastlane自动化打包(一)_第11张图片

Product Name字段中,输入mZone Poker UITests,然后单击Finish

App的分发测试(四) —— fastlane自动化打包(一)_第12张图片

mZone Poker UITests文件夹现在应该出现在Xcode的左侧导航菜单中。

转到目标的General页面。 在mZone Poker目标下方,您现在可以看到mZone Poker UITests。 选择mZone Poker UITests,如果您看到一条错误声明Signing for “mZone Poker UITests” requires a development team,请选择一个团队。

App的分发测试(四) —— fastlane自动化打包(一)_第13张图片
App的分发测试(四) —— fastlane自动化打包(一)_第14张图片

返回fastlane目录,然后将SnapshotHelper.swift拖到Xcode项目导航器中的mZone Poker UITests文件夹下。 当出现Choose options for adding these files窗口时,选择:

  • Copy items if needed
  • Create groups
  • mZone Poker UITests

在单击Finish之前取消选择mZone Poker目标。

App的分发测试(四) —— fastlane自动化打包(一)_第15张图片

接下来,在mZone Poker UITests中打开mZone_Poker_UITests.swift。 删除setUp()tearDown(),然后将testExample()的内容替换为:

// 1
let app = XCUIApplication()
setupSnapshot(app)
app.launch()
// 2
let chipCountTextField = app.textFields["chip count"]
chipCountTextField.tap()
chipCountTextField.typeText("10")
// 3
let bigBlindTextField = app.textFields["big blind"]
bigBlindTextField.tap()
bigBlindTextField.typeText("100")
// 4
snapshot("01UserEntries")    
// 5
app.buttons["what should i do"].tap()
snapshot("02Suggestion")   

这是代码的作用:

  • 1) 设置测试以拍摄快照并启动应用程序。
  • 2) 点击Chip Count文本字段(其可访问性标识符在故事板中预先设置为Chip Count)并在该字段中输入10。
  • 3) 点击Big Blind文本字段并输入100。
  • 4) 拍摄快照以显示应用与用户条目的外观。
  • 5) 点击What Should I Do?按钮然后采取另一个屏幕截图来捕获结果警报。

接下来,要创建mZone Poker UITests方案,请单击运行和停止按钮右侧的按钮,然后选择Manage Schemes…,选择mZone Poker UITests旁边的Show并在两个目标旁边共享以授予fastlane访问权限。 然后,单击mZone Poker UITests行和Edit ...

注意:如果未显示该scheme,请单击+并从目标下拉列表中选择mZone Poker UITests

App的分发测试(四) —— fastlane自动化打包(一)_第16张图片

在方案编辑器的左侧菜单中单击Build。 然后,在mZone Poker UITests目标旁边,选择TestRun选项,然后单击Close以保存更改。

App的分发测试(四) —— fastlane自动化打包(一)_第17张图片

离开Xcode,打开Fastfile,在create_app通道下面添加:

  desc "Take screenshots"
  lane :screenshot do
    snapshot
  end

screenshot通道使用快照根据Snapfile的设置截取屏幕截图。

保存Fastfile,返回终端并输入:

bundle exec fastlane screenshot

现在,观看...截图被捕获,您无需做任何其他事情!

快照完成后,屏幕截图的HTML预览应自动打开。

App的分发测试(四) —— fastlane自动化打包(一)_第18张图片

注意:快照需要访问Snapfile中列出的模拟器。 如果您缺少该列表中的一个或多个设备,请转到Window ▸ Devices,在Xcode中添加它们。 然后,单击+以添加新模拟器。

如果您看到有关模糊模拟器名称的警告,则可能需要删除重复的模拟器或更改模拟器名称以匹配Snapfile中的模拟器名称。

只需一个命令,您的所有设备屏幕截图均为英语和法语 - 它没有比这更好!


Creating the IPA File

构建和上传应用程序也是一个耗时的过程。 但是猜猜 - fastlane可以用它的gym工具做到这一点!

注意:请确保您已在Xcode中的mZone Poker目标中设置了bundle identifier和签名身份。

在终端中,运行:

fastlane gym init

创建Gymfile

打开Gymfile并将其内容替换为:

# 1
scheme("mZone Poker")
# 2
output_directory("./fastlane/builds")
# 3
include_bitcode(false)
# 4
include_symbols(false)
#5
export_xcargs("-allowProvisioningUpdates")

此代码执行以下操作:

  • 1) 指定mZone Poker的计划。
  • 2) 指定fastlane应存储.ipa app二进制文件的位置。
  • 3) 从构建中排除bitcodeBitcode允许Apple优化您的应用程序,但暂时将其排除以加快构建速度。
  • 4) 从构建中排除符号。 包含符号允许Apple访问应用程序的调试信息,但暂时将其排除以加快构建速度。
  • 5) 允许Xcode使用自动配置。

打开Fastfile并在屏幕截图下添加以下内容:

  desc "Create ipa"
  lane :build do
    # 1
    enable_automatic_code_signing
    # 2
    increment_build_number
    # 3
    gym
  end

这个build lane

  • 1) 在Xcode中启用自动配置。
  • 2) 将构建数增加1(因此每个构建号对于App Store Connect的上载要求是唯一的)。
  • 3) 创建一个签名的.ipa文件。

保存Fastfile,然后在终端中运行build

bundle exec fastlane build

如果系统提示您输入钥匙串密码以便fastlane访问您的证书,请执行此操作。 如果您不想重复授予相同权限,请选择Allow Always。 一旦构建成功完成,签名的.ipa应该出现在fastlane / builds中。

App的分发测试(四) —— fastlane自动化打包(一)_第19张图片

Uploading to App Store Connect

要将屏幕截图,元数据和.ipa文件上传到App Store Connect,您将使用deliver

首先,用以下内容替换Deliverfile的内容:

# 1
price_tier(0)
# 2
submission_information({
    export_compliance_encryption_updated: false,
    export_compliance_uses_encryption: false,
    content_rights_contains_third_party_content: false,
    add_id_info_uses_idfa: false
})
# 3
app_rating_config_path("./fastlane/metadata/app_store_rating_config.json")
# 4
ipa("./fastlane/builds/mZone Poker.ipa”)
# 5
submit_for_review(true)
# 6
automatic_release(false)

在这里你:

  • 1) 将价格等级设置为0,表明它是一个免费的应用程序。
  • 2) 回答Apple在手动提交审核时会向您呈现的问题。
  • 3) 提供应用评级配置位置。
  • 4) 提供.ipa文件位置。
  • 5) 将submit_for_review设置为true以自动提交应用以供审核。
  • 6) 将automatic_release设置为false,因此您必须在应用审核接受后手动释放该应用。

打开Fastfile。 在build lane之后,添加:

  desc "Upload to App Store"
  lane :upload do
    deliver
  end

然后,为fastlane创建元数据的预览,打开终端并输入:

bundle exec fastlane upload

如果一切看起来都很好,请在终端中键入y以批准。

完成lane后,登录App Store Connect。 屏幕截图,元数据和构建应该在那里,等待审查。

App的分发测试(四) —— fastlane自动化打包(一)_第20张图片

Putting It All Together

您现在可以使用单独的通道来创建应用,截屏,构建和上传。 虽然你可以一个一个地调用他们,但是你不想,对吧?

哦,不 - 你想要一个能完成一切的命令。

打开Fastfileupload通道后,添加:

  desc “Create app, take screenshots, build and upload to App Store"
  lane :do_everything do
    create_app
    screenshot
    build
    upload
  end

恰如其分,do_everything可以做好一切。

此外,要使通道完全免操作,请打开Deliverfile,并在底部添加:

force(true)

这会导致fastlane跳过屏幕截图和元数据批准。

现在,让fastlane完成所有繁重的工作,运行:

bundle exec fastlane do_everything

Supporting Multiple Targets

mZone_Sample_Project中看到Multiple_Targets文件夹? 在Xcode中打开Multiple_Targets / mZone-2 / mZone Poker.xcodeproj。 除了两个新目标之外,这个项目应该看起来很像第一个:mZone Poker PromZone Poker Pro UITest

要在运行mZone PokermZone Poker Pro之间切换,请单击“运行”和“停止”按钮右侧的按钮,然后选择您希望运行的应用程序的方案。

App的分发测试(四) —— fastlane自动化打包(一)_第21张图片
Select the scheme of the app you’d like to run.

构建并运行mZone Poker Pro。 它与mZone Poker几乎完全相同,但会返回更详细的建议。

General页面上,将mZone Poker的包标识符设置为您之前创建的标识符。

然后,为mZone Poker Pro设置一个暂定的新bundle ID,例如:

com.mZone-Poker-Pro.[Insert your email address minus “@”  and “.”]

现在,回到Finder。 将mZone中的Gemfilefastlane目录复制并粘贴到mZone-2中。 然后,将mZone-2 / fastlane / SnapshotHelper.swift拖入新项目。 当出现Choose options for adding these files窗口时,选择:

  • Copy items if needed.
  • Create groups.
  • mZone Poker UITests.
  • mZone Poker Pro UITests.

点击Finish

App的分发测试(四) —— fastlane自动化打包(一)_第22张图片

Setting Up Multiple Environments

环境(.env)文件包含应用程序在执行期间可以不同地访问的配置设置。 对于此项目,您将创建两个环境 - 每个应用程序目标一个环境。

打开您喜欢的文本编辑器,禁用智能引号并输入:

SCHEME = "mZone Poker"
TEST_SCHEME = "mZone Poker UITests"
BUNDLE_IDENTIFIER = "[[YOUR UNIQUE BUNDLE IDENTIFIER]]"
APP_NAME = "[[YOUR UNIQUE APP NAME]]"

此环境包含mZone Poker的环境方案,测试方案,包标识符和应用程序名称。 将[[YOUR UNIQUE BUNDLE IDENTIFIER]]替换为mZone Pokerbundle ID[[YOUR UNIQUE APP NAME]]和应用程序的唯一名称。

将文件保存为mZone-2 / fastlane,为.env.mZone_Poker(没有文件后缀)。 由于默认情况下.env变量是隐藏文件,如果在Finder中看不到.env.mZone_Poker,请按Shift-Command-.。 而在Finder中可以隐藏文件。

同样,创建第二个文件,其中包含:

SCHEME = "mZone Poker Pro"
TEST_SCHEME = "mZone Poker Pro UITests"
BUNDLE_IDENTIFIER = "[[YOUR UNIQUE BUNDLE IDENTIFIER]]"
APP_NAME = "[[YOUR UNIQUE APP NAME]]"

替换[[YOUR UNIQUE BUNDLE IDENTIFIER]] mZone Poker Pro的当前bundle ID。 然后创建一个暂定的唯一应用名称,例如:

mZone Poker Pro [Insert your email address minus “@”  and “.”]

请记住,应用名称不能超过30个字符,因此必要时会截断。

将文件另存为.env.mZone_Poker_Pro在同一目录中。

现在,当您在方案之间切换时,您将能够使用变量来访问当前设置。

对于初学者,打开Appfile,取消注释app_identifier行并替换:

app_identifier("[[APP_IDENTIFIER]]")

使用下面

app_identifier(ENV['BUNDLE_IDENTIFIER'])

“ENV ['BUNDLE_IDENTIFIER']”告诉fastlane从您设置为当前环境的任何一个中获取bundle ID

Deliverfile中,将.ipa行替换为:

ipa("./fastlane/builds/#{ENV['APP_NAME']}.ipa")

Gymfile中,将方案行替换为:

scheme(ENV['SCHEME'])

Snapfile中,将schemeoutput_directory行替换为:

scheme(ENV['TEST_SCHEME'])

output_directory "./fastlane/screenshots/#{ENV['SCHEME']}"

最后,返回到新的元数据目录。 选择其所有内容并将其放入名为mZone Poker的新文件夹中。

App的分发测试(四) —— fastlane自动化打包(一)_第23张图片

然后,复制那个复制mZone Poker Pro的文件夹和名称。

App的分发测试(四) —— fastlane自动化打包(一)_第24张图片

mZone Poker Pro / en-US / name.txtmZone Poker Pro / fr-FR / name.txt的内容更改为新应用程序的名称。 为简单起见,暂时保留所有其他元数据。

现在,要运行第二个目标的所有命令,您可以输入:

bundle exec fastlane do_everything --env mZone_Poker_Pro

这将使用.env.mZone_Poker_Pro的变量运行do_everything

但是如果你想一次为所有目标运行所有命令呢?

打开Fastfile。 在do_everything下面,添加:

  def execute_for_all_envs
    # 1
    schemeList = Dir.glob(".env.*”)
    # 2
    schemeList.each do |file|
      # 3
      Dotenv.overload(file)
      # 4
      yield
    end
  end

这个方法:

  • 1) 放入当前目录的.env. files into an array
  • 2) 遍历每个.env文件。
  • 3) 使用当前.env文件重载ENV
  • 4) 执行execute_for_all_envs调用后的块。

然后,要从do_everything调用execute_for_all_envs,请将do_everything的内容替换为:

    if ENV['SCHEME'] != nil
      create_app
      screenshot
      build
      upload
    else
      execute_for_all_envs{ do_everything }
    end

现在,如果未在命令行中指定环境,则ENV ['SCHEME'] == nil,因此execute_for_all_envs运行。 execute_for_all_envsENV设置为第一个环境,返回到调用块,然后重新运行do_everything

do_everything为该环境完成所有操作后,execute_for_all_envs中的循环继续并返回下一个环境,依此类推。

现在你可以运行:

bundle exec fastlane do_everything

当你坐下来放松时,让fastlane为两个目标做所有繁重的工作。

App的分发测试(四) —— fastlane自动化打包(一)_第25张图片

fastlane还支持TestFlight提交和大量集成。 您可以自定义您的lane,以提供有关Slack的实时反馈,与Jira boards交互等。访问官方fastlane网站(the official fastlane website)以了解更多信息。

后记

本篇主要讲述了fastlane自动化打包,感兴趣的给个赞或者关注~~~

App的分发测试(四) —— fastlane自动化打包(一)_第26张图片

你可能感兴趣的:(App的分发测试(四) —— fastlane自动化打包(一))