须藤save_time

“时间是我们最想要的,但我们最浪费的是”
威廉·佩恩

在我们开始之前…

每个开发人员迟早都必须打开Safari并键入https://itunesconnect.apple.com来设置要通过AppStore分发的应用程序。 但是恰好在登录iTunes后,您将了解,应该首先设置开发人员帐户。 并且自开始以来,您将看到更多应执行的其他步骤:

  • 创建一个applicationID
  • 生成证书(用于开发和分发)
  • 设置应用程序功能(例如,推送—通知)
  • 生成一组配置文件以及更多

即使完成此操作,也应该管理所有创建的内容,与队友共享,考虑安全性等等。 是的,很多东西,我知道…

“等等,我只想将我的应用程序发送到AppStore。 为什么不能只使用一个命令行命令?»。

实际上,它被称为Fastlane。

概述和要求

«fastlane —是一个用于iOS,Mac和Android开发人员的工具,用于自动化繁琐的任务,例如生成屏幕快照,处理配置文件和发布应用程序。»—这是您在git页面上看到的第一行(https: //github.com/fastlane/fastlane),这是100%正确的。

Fastlane是用Ruby编写的,它是一组或多或少独立的模块,已构建了其丰富的功能集。 它的结构很容易扩展,因为如果您想向系统添加一些新功能,则可以编写简单的Ruby脚本,并在现有的fastlane模块中使用它们,甚至可以向fastlane添加新模块。

Fastlane提供了一堆命令,可帮助自动执行应用程序部署,甚至执行不同的常见任务。 Fastlane是非常灵活且可扩展的工具。

目前,fastlane由200多个不同的模块组成。

我们将在下面列出最有用和最受欢迎的内容,并显示使用fastlane的iTunesConnect传递系统的基本设置。

由于我是iOS平台的软件开发人员,因此我们将深入探讨大多数适用于iOS开发人员的使用fastlane的过程,但是我敢肯定,此强大工具所支持的所有平台的主要步骤都相同。

适用于iOS的Fastlane需要安装以下工具:

  • macOS X El Capitan或更高
  • Xcode-开发人员-适用于xCode 7或更高版本的工具
  • 红宝石/酒(可选,推荐)
  • textEditor🙂

快车道能为我们做些什么? 好吧,这个列表很大,包括很多东西:

  • 交付:将屏幕截图,元数据和您的应用程序上载到App Store
  • 供应:将您的Android应用及其元数据上传到Google Play
  • 快照:自动在每台设备上拍摄您的iOS和tvOS应用程序的本地化屏幕截图
  • screengrab:自动在每台设备上拍摄Android应用的本地化屏幕截图
  • frameit:快速将屏幕截图放入正确的设备框架中
  • pem:自动生成和更新您的推送通知配置文件
  • 感叹:因为您宁愿花时间在建物上,也不愿与资源调配作斗争
  • 产生:使用命令行在iTunes Connect和Dev Portal上创建新的iOS应用
  • cert:自动创建和维护iOS代码签名证书
  • 飞船:Ruby库可访问Apple Dev Center和iTunes Connect
  • 试点:从您的终端管理TestFlight测试人员和构建内容的最佳方法
  • 登机:邀请您的TestFlight Beta测试人员最简单的方法
  • 健身房:构建您的iOS应用从未如此简单
  • 匹配:使用Git轻松在整个团队中同步您的证书和个人资料
  • 扫描:为iOS和Mac应用程序运行测试的最简单方法

在本教程中,我们将浏览一些主要功能,例如比赛,健身,试飞,叹气。 这对于启动和设置良好的交付系统应该足够了,它将为您节省时间。

所以,让我们开始吧。

环境设定

要安装fastlane,请打开终端并执行以下步骤:

  1. 检查最新的xCode —通过键入代码选择工具-安装

就我而言,这里已经安装好了,如果没有安装,您将看到日志,其中包含详细的过程说明以及一些弹出窗口,其中包含安装xCode工具的进度。

2.下一步是安装fastlane本身,只需键入sudo gem install fastlane即可。

完成这两个步骤后,我们可以为测试项目启动安装快速通道。

项目设置

您可能已经有一些项目,否则您可以创建一个新的单窗口应用程序。 在本教程中,我将创建一个新的。 我称它为“ testFastlane”

提示:如果iTunesConnect中没有项目设置,您将发现“ Produce ”命令非常有用。 我不会深入探讨,但是您可以在 https://github.com/fastlane/fastlane/tree/master/produce中 获得更多信息

导航到项目的根文件夹,打开终端,然后通过键入cd 切换到项目目录在本例中为cd / Users / Name / Documents / Projects / education /

快车道

接下来,键入fastlane init-此命令将为您创建带有FASTFILE的默认目录。 之后,您将看到输入Apple ID的请求,例如developer@apple.com 下一步-fastlane将根据提供的信息自动为您生成fastlane配置。

提示:最好为Fastlane使用创建单独的Apple ID,并与团队共享以与Fastlane和CI构建一起使用。

创建完成后,您将能够看到带有从iTunesConnect提取的所有元数据的新fastlane目录。 就我而言,我没有太多:

如果您有一些元数据,您将看到以下内容:

提示—建议使用Gemfile定义fastlane的所有依赖关系。 这将允许定义快速通道版本和依赖项,并在“ Gemfile.lock”的帮助下在团队中共享它们。 Gemfile还可以加快Fastlane的工作速度。

要准备Gemfile,您需要:

1.通过运行sudo gem install bundler安装bundler

2.运行bundler init创建Gemfile如下

运行[sudo]捆绑包更新,然后将./Gemfile./Gemfile.lock添加到版本控制中

—每次运行fastlane时 ,请使用bundle exec fastlane [ lane ]

—在CI上,添加[sudo]捆绑包安装作为第一步

—要更新fastlane,只需运行[sudo]捆绑包更新

FASTFILE配置

提示:FASTFILE是ruby脚本,在启动fastlane时由fastlane核心引擎评估,有关ruby的更多信息,请访问 http://rubylearning.com

FASTFILE允许您出于任何需要设置构建。 最常见的-开发版本,adHock版本,结构分发版本,iTunes testflight版本。 所有这些任务以及单元测试都可以通过一线快速通道调用来完成

正态分布应用程序的过程由几拍子组成。 主要的一个是代码签名过程。

有时很难管理所有证书(尤其是如果您在同一帐户上只有很少的开发团队,或者只有几个应用程序,或者两者兼有)。 准备构建的开发人员应该每次都手动控制所有事情,有时甚至忘了检查并仅在构建准备好甚至上载之后才进行检测,但这太迟了,时间已经过去了。 幸运的是,fastlane具有完美的工具来自动进行代码签名和证书管理-fastlane匹配

我建议在开始配置FASTFILE之前先设置此工具。

比赛设定

首先,您应该创建一些私有存储库来存储证书和配置文件。 完成后,打开终端,使用cd命令切换到文件夹,然后运行match init

系统将要求您提供存储库URL,输入URL链接以与其进行匹配。

接下来,您将看到成功消息和建议,以在存储库上创建适当的证书和配置文件对。

如果尚未创建证书(fastlane将询问其他信息以继续您的请求),只需按照控制台中的说明完成此步骤。

让我们通过键入fastlane match appstore创建一个用于appstore分发的对。 您将在下面的屏幕截图中看到类似的内容:

现在,要在任何计算机上安装创建的证书,只需键入终端快速通道匹配应用程序商店 ,所有证书都将安装在新计算机上(由于原因,您还需要访问存储库并知道密码-加密文件上的短语能够解密它们)。

提示:如果您关心安全性,则会使用密码对带有证书和配置的存储库进行加密,因此即使在git中,它们也不会显式可用。 但是可以肯定的是,在私有存储库中拥有这些证书也是值得的。 在GitHub上可能要花一些钱,但是bitbucket允许无限的私有存储库,因此在这种情况下我们将使用它。 有关安全性的更多信息,请访问 https://codesigning.guide

要回答“是否安全?”这个问题,只需看一下快速通道匹配可用的功能:

  • 您可以完全控制Git存储库的访问列表,而无需第三方服务
  • 即使您的证书被泄露,没有您的iTunes Connect登录凭据,也无法使用它们造成任何损害
  • Match当前不支持内部企业配置文件,因为它们难以控制
  • 如果您使用GitHub或Bitbucket,我们建议为所有有权访问证书回购的帐户启用2因子身份验证

如果转到存储库源代码,将在下面的屏幕截图中看到类似的内容。 很少有单独的文件夹包含证书和针对已设置的每种活动类型的准备(在我们的情况下仅适用于appStore)。

提示:您可以运行类似的命令来添加用于开发( fastlane匹配开发 )和adhoc( fastlane匹配adhoc )的 证书

现在,导航到项目文件夹并打开fastlane目录 ,您将能够看到MATCHFILE 。 该文件的内容如下图所示。

match命令所需的所有这些信息,以允许正确管理证书和特定应用程序的配置文件。

组态

从项目目录中打开和编辑FASTFILE之前,请检查Appfile-此文件应包含您应用程序的appIdentifier,appleID,teamID。 如果否,则可以手动进行设置,如果缺少某些信息,则表示在安装过程中出现了问题。

Appfile如下图所示:

提示:符号“#”表示用于注释的行,因此不会被fastlane处理,因此,如果需要,可以随时在文件中添加任何其他信息

提示:建议使用某些具有附加功能的te​​xtEditor而不是标准的textEdit),因为有时候textEdit可以自动更改某些符号,您会得到意想不到的结果。 很好的选择可以是Sublime(付费)或TextWrangler(免费)。 但是,始终由您来选择最合适的方法。

好的,我们打开FASTFILE。

当您打开它时,您会看到一些带有少量通道的示例实现。 很好地开始,因此我们准备实现自己的通道,让我们从FASTFILE中删除所有内容以从头开始。

提示:您可以转到在线服务并使用友好的UI创建FASTFILE- https: //fabric.io/features/distribution?utm_campaign = github_readme

对于我们的教程,我们将为iTunes testflight分发创建一条通道,并在松弛通道上进行通知。 让我们将此车道称为iTunes。

要创建新车道,只需键入

车道:做

结束

在我们的情况下,这将类似于:

车道:itunes do

结束

现在,您可以通过键入fastlane itunes在终端上运行此通道,但是它什么也没做。 尝试一下。

为了使我们的车道更有用,让我们添加用于构建项目的命令— Gym

提示:要获取所有命令的列表,只需键入 fastlane -show列出所有具有描述的可用车道或 fastlane list -show列出所有 具有描述的 可用车道

车道:itunes do

体育馆(方案:“ testFastlane”,

工作区:“ testFastlane.xcworkspace”,

include_bitcode:true)

结束

现在,如果您运行fastlane itunes,将在我们项目的根目录中创建构建。

好,但是还不够。 让我们添加使用match进行自动签名的可能性,这是我们之前配置的:

车道:itunes do

匹配(app_identifier:“ com.testFastlane.sample”,键入:“ appstore”)

体育馆(方案:“ testFastlane”,

工作区:“ testFastlane.xcworkspace”,

include_bitcode:true)

试飞

结束

现在,在构建应用程序之前,fastlane将检查证书并安装最新的证书。 我们还添加了其他命令testflight-此命令会将您的内部版本上传到iTunes。

更好,但是我们可以做更多的事情:

车道:itunes do

sure_git_status_clean

build_number =`git rev — list — — count HEAD`

crement_build_number(build_number:build_number,xcodeproj:“ testFastlane.xcodeproj”)

cocoapods(use_bundle_exec:true)

匹配(app_identifier:“ com.testFastlane.sample”,键入:“ appstore”)

体育馆(方案:“ testFastlane”,

工作区:“ testFastlane.xcworkspace”,

include_bitcode:true)

试飞

结束

很多变化,现在发生了什么? 从上到下,我们要求快速通道

  • 确保工作副本中没有未提交的更改,
  • 增加内部版本号,使其等于git中提交的数量
  • 运行pod install 。 可以在Gemfile中指定cocoapods的版本-团队中不再同步cocoapods的版本
  • 检查证书
  • 创建构建
  • 发送给testflight

是的,这很多……仅一行代码—很好,但是即使现在,我们可以做更多!

让我们向Slack频道中的所有队友添加其他通知,以确保每个人都收到有关新版本的通知。

提示:传入的Web挂钩是一种将来自外部源的消息发布到Slack中的简单方法。 它们利用普通的HTTP请求以及JSON负载(包括消息文本和一些选项)进行操作。

您可能需要创建Incoming WebHook进行Slack集成。 为此,请访问 https://api.slack.com/incoming-webhooks 并按照此页面上的说明进行操作

要继续,只需在FASTFILE中再添加一个变量,然后调用slack命令,如下所示:

ENV [“ SLACK_URL”] || =«https://hooks.slack.com/services/someURL“

车道:itunes do

sure_git_status_clean

build_number =`git rev — list — — count HEAD`

crement_build_number(build_number:build_number,xcodeproj:“ testFastlane.xcodeproj”)

cocoapods(use_bundle_exec:true)

匹配(app_identifier:“ com.testFastlane.sample”,键入:“ appstore”)

体育馆(方案:“ testFastlane”,

工作区:“ testFastlane.xcworkspace”,

include_bitcode:true)

试飞

结束

after_all做|车道|

如果是ENV [“ SLACK_URL”]

松弛(

消息:«MyAwesomeApp已成功发布!”,

成功:对,

结束

clean_build_artifacts

结束

现在,如果您在终端( fastlane itunes )中运行此车道,则会得到下一个(由步骤描述):

建立增量和匹配步骤

安装证书和健身步骤:

之后,编译步骤日志(由于冗长的清单而被跳过)和iTunes上传:

当然还有关于松弛的通知:

太好了,现在您应该感觉自己更好,更强大

奖金

哦,还有一件几乎忘了的事情-让我们按照以下步骤添加车道的最主要部分:

1.创建新文件,并将此代码放入其中:

def ship_it

rand = Random.rand(0..1)

如果兰德== 0

松鼠

elsif rand == 1

结束

结束

def松鼠

放入“

!!!!

!!!!!!!!

!!!!!!!!!!! O_O

!!! !!!!!!! / @ @ \\

!!!!!! \\ X /

!!!!!! / m!m

!!!! / __ |

!!!! | / \\ __

!!! \\ ______ \\

结束

防风船

放入“

o ..

…哦

__ [] __

__ | _o_o_o \ __

\\\“ \” \“ \” \“ \” \“ \” \“ \” /

\\。 .. /

^^^^^^^^^^^^^^^^^^^^^

结束

2.保存文件并将其命名为ship_sugar 。 将文件放在fastlane目录中。

3.打开FASTFILE并在最顶部添加下一行:

eval(File.open(File.expand_path(“ ../ ship_sugar”,__FILE __))。read)

4.修改FASTFILE中的after_all部分:

after_all做|车道|

如果是ENV [“ SLACK_URL”]

松弛(

消息:«MyAwesomeApp已成功发布!”,

成功:对,

结束

装运它

结束

clean_build_artifacts

结束

如果按照上述说明进行了所有操作,那么最后,您的FASTFILE应该如下所示:

eval(File.open(File.expand_path(“ ../ ship_sugar”,__FILE __))。read)

ENV [“ SLACK_URL”] || =«https://hooks.slack.com/services/SomeURL“

车道:itunes do

sure_git_status_clean

build_number =`git rev — list — — count HEAD`

crement_build_number(build_number:build_number,xcodeproj:“ testFastlane.xcodeproj”)

cocoapods(use_bundle_exec:true)

匹配(app_identifier:“ com.testFastlane.sample”,键入:“ appstore”)

体育馆(方案:“ testFastlane”,

工作区:“ testFastlane.xcworkspace”,

include_bitcode:true)

试飞

结束

after_all做|车道|

如果是ENV [“ SLACK_URL”]

松弛(

消息:«MyAwesomeApp已成功发布!”,

成功:对,

结束

装运它

结束

clean_build_artifacts

结束

到底是什么

耐心点! 让我们运行fastlane itunes ,最后,您将能够看到松鼠或在终端中发货,例如:

很好,是吗?

基本上,这就是您能够开始使用fastlane所需的全部。

提示:为了使过程更具描述性,您可以使用 desc 命令,例如 desc«一些注释将在控制台中显示»

CI整合

fastlane是一个非常强大的工具,它为我们节省了许多项目构建时间,但它可以进一步改善我们的开发流程。 由于fastlane是命令行的第一行-Liner ,因此可以在CI服务器上使用。 此外,它还可以用于轻松在不同CI(例如Team-city,Jenkins等)之间移动项目。

提示:CI:持续集成—是 每天几次 将所有开发人员工作副本合并到共享 主线 的实践 。要了解更多信息,请访问 https://en.wikipedia.org/wiki/Continuous_integration

在下一篇文章中,我将介绍将fastlane与CI集成的过程。

接下来做什么:

如果要执行更多操作,请尝试执行下一项操作:

  • 发展专门目的创建更多的通道
  • 整合crashlytics分布
  • 集成自动—签名( 生产,证书,叹气

在本教程中,我们涵盖了很多步骤,但是其中大多数步骤仅应执行一次。 因此,fastlane可以每天节省您的时间。

如您所见,fastlane允许您使用完全受控的流程来设置自动分发过程。 您还可以编写自己的零件并将其与fastlane集成在一起,使其更加灵活并满足您的需求。

要获取更多信息,我建议访问官方网站-https://fastlane.tools/。