使用 fastlane +fir实现 iOS 持续集成上传

      距离上次写iOS自动化打包(Jenkins + gitlab + fir + shell)有一段时间了。毋庸置疑,Jenkins对我们打包的帮助还是很大的——被测试的同学追着要IPA包的日子终于一去不复返了。那为什么又要用fastlane+fir的方式呢?fastlane又是什么呢?和Jenkins的打包方式又有什么区别呢?没关系,接下来我们仔细的研究一下,看看fastlane到底是什么,以及两者之间究竟有什么差异

一、Fastlane是什么?

1.作为公司的客户端程序员,少不了在发布应用的时候各种等待。标准的手动发布流程是:编译->打包上传->填写应用更新数据->等待iTunesConnect编译->选择版本发布,整个过程大概需要30分钟左右。关键是这个过程就像windows装系统一样,虽然手工参与的不多,但是要一直守在电脑前等着。程序员都很懒,不喜欢等着电脑傻傻等待。

 2. 简单来说,Fastlane是一整套的工具组合套装。它里面的很多命令执行的底层并不是自己实现的,而是调用其他的插件或者工具执行的。比如说打包,Fastlane中的gym工具只是xcodebuild工具的一个封装,调用的其实还是xcodebuild中的打包命令而已。所以其实归根到底和xcode中的Archive师出同门而已。Fastlane中大多数命令都是这样类似的原理

3.Fastlane本身没有一套特殊语法,使用的Ruby语言,相信使用过cocoapods的同学应该很容易理解。

4.Fastlane可以非常快速简单的搭建一个自动化发布服务,并且支持Android,iOS,MacOS。他可以实现一条命令从编译选版发布全程不用干预。作为程序员的你只要一条命令,看集美剧,发布就完成了。截止刚刚Fastlane官网上宣称已经为程序员节省了4百万小时+

二、Fastlane组件

deliver: 上传截图, 元数据, app应用程序到App Store

supply: 上传Android app应用程序和元数据到Google Play

snapshot: 自动捕获iOS app应用程序本地截图

screengrab: 自动捕获Android app应用程序本地截图

frameit: 快速截屏并将截屏放入设备中

pem: 自动生成和更新推送通知配置文件

sigh: 开发证书和描述文件下载

produce: 使用命令行在iTunes Connect上创建新的app和开发入口

cert: 自动创建和配置iOS代码签名证书

spaceship: Ruby 库访问 Apple开发者中心和 iTunes Connect

pilot: 最好的方式管理你的TestFlight 测试人员和从终端构建

boarding: 最简单的方式邀请你的TestFlight beta测试人员

gym: iOS app打包签名自动化工具

match: 使用Git同步你的团队证书和配置文件

scan: 最简单方式测试你的 iOS 和 Mac apps


等等....我们今天用不了这么多,仅仅需要用到2-3个而已,但是从这些组件可以看到,Fastlane还是很强大的,基本上能满足客户端打包发布的所有需求了。

三、Fastlane和Jenkins自动化的差异和选择

单就笔者对这两者的使用来看,两者之间各有利弊,关键看你的需求

1.Jenkins作为一个服务,需要搭建环境,可以部署在自家的任何一台电脑上。但是Jenkins在配置过程比较多且较为冗杂,容易出错,对于很多初级工程师来说有一定的门槛。同时Jenkins可以结合GIT插件,实现每次代码提交自动打包的自动化,同样这样其实对电脑(Mac)性能有一定的要求。

2.Fastlane则比较简便,通过命令安装好环境之和插件后,就可以直接调用他的相关命令了。但是Fastlane不支持象Jenkins结合GIT插件那样的高度自定义化服务。

综上来看,如果想要高度自定义服务,选择Jenkins的自动化集成是比较合适的,但是如果只是要实现拿到一个包或者上传,更加便捷轻量级的过程,对于初级工程师来说应该是个不错的选择。

四、Fastlane安装

系统要求:macOS或 Linux 使用 Ruby 2.0.0及以上版本

1、首先要安装正确的 Ruby 版本。在终端窗口中用下列命令来确认:

1  ruby -v

2、然后检查 Xcode 命令行工具是否安装。在终端窗口中输入命令:

  xcode-select --install

如果未安装,终端会开始安装,如果报错误:command line tools are already installed, use "Software Update" to install updates.代表已经安装。

3、以上依赖配置好之后就可以通过 rubygem 进行安装了:

 sudo gem install fastlane

安心等待一会,fastlane就安装完成了。


打开终端,cd到你的工程目录,然后执行fastlane init后会看到如下选项

What would you like to use fastlane for?

1. Automate screenshots

2. Automate beta distribution to TestFlight

3. Automate App Store distribution

4. Manual setup - manually setup your project to automate your tasks

这四个选项的意思是

自动截屏。这个功能能帮我们自动截取APP中的截图,并添加手机边框(如果需要的话),我们这里不选择这个选项,因为我们的项目已经有图片了,不需要这里截屏。

自动发布beta版本用于TestFlight

自动的App Store发布包。

手动设置。

选择第四个后一路回车即可,我们会看到生成了我们熟悉的fastlane目录,该目录下包含了Appfile和Fastfile。我们打开这两个文件。

Appfile

# app_identifier("[[APP_IDENTIFIER]]") # The bundle identifier of your app

# apple_id("[[APPLE_ID]]") # Your Apple email address

# For more information about the Appfile, see:

#    https://docs.fastlane.tools/advanced/#appfile

发现里面没有任何信息(“#”在ruby里是注释,所以里面没有任何信息)注释的部分中,app_identifier用于指定APP的bundle id,apple_id指的是你的AppleID。

目录结构大概如下所示:Fastfile下面的文件现在在你的目录下面应该是没有的,因为你并没有安装插件和MATCH等所以并不会生成相关文件。

Gemfile 告诉我们fastlane 依赖的gem以及版本等其他信息。这个跟本文主题不大,笔者就不详细描述了

fastlane文件夹里的Appfile看文件也知道,里面是关于本App的信息的;Fastfile则是fastlane的最主要的文件,在这个文件中可以编写我们需要使用的各个工具的顺序、方式等。

这里我们先看一个已经写好的fastlane的内容:


大家可以看到,这段脚本中,有两段lane ,分别是Firim和createIpa 其中Firim中又调用了createIpa和firim“方法”。那么,createIpa中的gym比较特殊的配置项就是:export_method 笔者这里设置的ad-hoc,(# 指定打包所使用的输出方式,目前支持app-store, package, ad-hoc, enterprise, development)

export_options就是设置证书的选项,这个是fastlane为了支持XCODE9,解决了在XCODE9上的BUG,所以XCODE9的小伙伴一定不要忘了加这个选项。

还有就是Firim方法其实是调用的Fir插件的函数。所以这里首先要安装,剩下就

是输入你的Firim的TOKEN就可以了。

fastlane add_plugin firim

到这里,你就可以cd 到项目根目录下面执行

fastlane Firim

耐心等待一会儿之后,

可以看到输出的APP信息和fastlane打包信息 其中打包大概花费了339秒,上传用了14秒。

打开Firim个人网页看到,的确也已经上传到了这里。


ipa文件Archive压缩包都已经出现在了工程目录下面,至此,我们的一键打包审核流程完美收工。

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

推荐阅读更多精彩内容