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

If sticks were screenshots, this dog would be nearly as helpful as fastlane

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

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

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


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?

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

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

  • Appfile:存储应用程序标识符,Apple ID以及fastlane设置应用程序所需的任何其他标识信息。
  • Fastfile:管理您将创建的用于调用fastlane操作的通道。

在您选择的文本编辑器中打开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

保存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通道。

你应该看到这样的东西:

在输出的顶部,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或返回到此段落的顶部并重复。 我们知道,令人沮丧,但我们相信你会打破无限循环!

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

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 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后出现的说明:

这就是你接下来要做的

1. Creating a Test Target

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

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

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

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

返回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目标。

接下来,在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

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

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

  desc "Take screenshots"
  lane :screenshot do
    snapshot
  end

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

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

bundle exec fastlane screenshot

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

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

注意:快照需要访问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中。


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。 屏幕截图,元数据和构建应该在那里,等待审查。


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之间切换,请单击“运行”和“停止”按钮右侧的按钮,然后选择您希望运行的应用程序的方案。

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


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的新文件夹中。

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

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为两个目标做所有繁重的工作。

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

后记

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,176评论 5 469
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,190评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,232评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,953评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,879评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,177评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,626评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,295评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,436评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,365评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,414评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,096评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,685评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,771评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,987评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,438评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,032评论 2 341

推荐阅读更多精彩内容