iOS菜鸟福利!带你一键轻松搞定项目构建、封包、上传

iOS可持续构建集成部署,Jenkins+Fastlane+Git+Fir架设一键构建部署内测分发服务!

首先我们来看一个iOS开发手动构建打包的故事......

Paste_Image.png

就如大家熟悉的,我们平常手动打包都要经历更新代码、更新build version、使用Xcode Archive出IPA包。然后如果是内测包就保存到本地,如果要使用内测分发网站,就要上传到相应的网站并配置好相应的参数;如果是上传TestFlight或者App Store包则直接上传。
这一套下来,偶尔做做还觉得没什么,如果是遇到频繁修改需求、调整UI、修复BUG,又或者是同时有好几个任务分支需要分别打包的时候,就会十分抓狂了,最后不能自拔,堕落深渊。

Paste_Image.png

难道就这样了吗?就只能这样屈服于可恶的现实吗?
不!
我们要直面惨淡的人生,敢于挑战种种操蛋的困难!
在这里,我要向大家传授一套“组合拳”,虽然不像军体拳一样能够克制女子防狼术,但是确实能大大减轻苦逼iOS开发们的工作,提升效率。

以下是需要用到的招式:

  • Git: 管理代码,这里我使用OSChina的git仓库服务;
  • Jenkins: 提供构建平台,从git仓库拉取代码、更改build version、调用fastlane;
  • Fastlane: 构建代码、打包、上传
  • Fir: 内测分发网站

都说了是组合拳,所以我这里只会说说这套技术最简单的应用,至于Jenkins和fastlane的各种插件、扩展功能(十分强大),请有兴趣的继续了解。

1.准备一个project

1.1创建项目

这里我随便创建一个项目,随便打上一行字

Paste_Image.png

1.2配置项目

1.2.1配置一下证书

如果自己有证书那就直接使用Xcode的自动管理即可,但是我没有,于是我上X宝买了一个临时的(囧)。
要手动配置一下。

Paste_Image.png

1.2.2配置build number

为了稍后实现自动递增build number做准备,这里我使用4段式,最后6位是时间。

Paste_Image.png

2. Fastlane的安装使用

Fastlane github地址

Fastlane应该说是一个ruby工具集合包,是一个全方位自动化流程工具,从构建、签名、封包、上传、单元测试等等都可以做,十分强大方便。

这里有两个名词(其实我也不懂ruby,这是我的粗浅理解):
action: Fastlane的插件,fastlane有自带提供诸多功能的action,也可以自定义。可以理解为封装好的ruby函数。
lane: Fastlane的任务,开发者编写,可以理解为fastlane命令调用的自定义方法。

2.1 安装

直接使用rubyGem命令安装即可

sudo gem install fastlane

可以随时使用以下命令查看版本

fastlane --version
Paste_Image.png

ps:关于fastlane升级
我发现直接使用sudo gem update fastlane总是失败,一定要先用sudo gem uninstall fastlane删除旧版本,再重新安装,才能装到最新版本。

2.2初始化Fastlane

进入到项目目录,使用以下命令初始化

fastlane init
Paste_Image.png

按照提示输入相关信息,然后就会自动创建出fastlane的配置文件

Paste_Image.png

2.3开始写fastlane脚本代码

要用到的Action

  • gym: 针对于 iOS 打包和签名的自动化工具
  • get_version_number: 获取项目version number
  • ensure_git_status_clean: 检查git状态
  • git_pull: git拉取代码
  • increment_build_number: 递增build version number
  • commit_version_bump: 创建一个build version number改变的提交注释
  • push_to_git_remote: git推送代码到远程仓库
2.3.1编辑“Fastfile”文件

里面已经给你提供了一个基本的流程模板

Paste_Image.png
2.3.2使用gym构建打包

先来看一下fastlane怎么跑,删除多余代码,增加一个打印代码

# This is the minimum version number required.
# Update this, if you use features of a newer version
fastlane_version "2.18.3"

default_platform :ios

platform :ios do
  lane :ci do
    puts "Begin to run ci"
  end
end

在终端输入以下命令运行lane,格式是“fastlane + platform + lane”

fastlane ios ci
Paste_Image.png

好,确定fastlane是可以跑的!
那我们改一下代码,这里因为我买的证书只有开发真机测试的,没有分发的,所以传一个export_method参数为“development”。还有一个参数output_directory是ipa包保存地址。

# This is the minimum version number required.
# Update this, if you use features of a newer version
fastlane_version "2.18.3"

default_platform :ios

platform :ios do
  lane :ci do
    puts "Begin to run ci"
    gym(
      export_method:"development",
      output_directory:"./fastlane/build",
    ) 

  end
end



跑起来,孩儿们!

Paste_Image.png

Paste_Image.png

fastlane的log真是超棒棒的!
ipa包已经打出来了。

Paste_Image.png
2.3.3安装fir-cli工具

fir提供了一套打包、上传的工具,其实它也可以打包,但是我还是喜欢用fastlane,因为真的太强大了。
fir-cli github地址

在fir注册后获取你的token。

Paste_Image.png
2.3.4完善fastlane脚本

这个用来区分不同的版本,免得搞混了。
我先在OSChina旗下的码云创建了一个仓库(你们也可以使用github),创建了2个新分支dev1和dev2,模拟开发中多个功能同时开发的情况。

Paste_Image.png

直接上代码

# This is the minimum version number required.
# Update this, if you use features of a newer version
fastlane_version "2.18.3"

default_platform :ios

platform :ios do
  lane :ci do|options|
    branch = options[:branch]
    build_no = get_version_number + '.' + Time.new.strftime("%m%d%H%M")
    
    puts "Begin to run ci"

    #确认分支、git状态、拉取最新代码
    sh "git checkout #{branch}"
    ensure_git_branch(branch: branch)
    ensure_git_status_clean
    git_pull

    #递增build number
    increment_build_number(build_number: build_no)

    #开始打包
    gym(
      export_method:"development",
      output_directory:"./fastlane/build",
    )

    #使用fir-cli上传ipa
    sh "fir publish ./build/HVWCIDemo.ipa -T 304795a8933faf8bc1ba8b21521eafa1"

  end
end

跑跑跑,这里我增加了一个参数"branch"用来区分不同的分支。

fastlane ios ci branch:dev1
Paste_Image.png

中间省略......

Paste_Image.png

我们可以看到,fir上已经成功上传到了一个ipa包!

Paste_Image.png

现在你已经可以使用fastlane一句代码构建、打包、上传app了!

但是如果我连一句代码都不想打,也不想每次都要进入项目目录、打开终端来操作;而且如果其他小伙伴也想用这个方便的工具怎么办?难道每个人都要装一套?
当然不!我们可以使用Jenkins作为容器,做一个构建服务器。
请看下文。

3. Jenkins的安装使用

来这里Jenkins官网下载,可以直接下个war包,然后跑命令跑起来,安装的话安装默认的插件就好了,之后可以自己配的。

java -jar jenkins.war

配置完进来就是这样子

Paste_Image.png

3.1配置一下git仓库的ssh登录

如果不使用ssh登录的话,会在jenkins运行的终端出现账号密码输入提示。
生成一个ssh key,把公钥上传到码云,私钥配置到Jenkins中。

Paste_Image.png
Paste_Image.png

3.2创建Jenkins任务

3.2.1新建任务
Paste_Image.png
3.2.2配置git
Paste_Image.png
3.2.3配置调用Fastlane的命令
Paste_Image.png
3.2.3跑起来
Paste_Image.png

点击正在构建的任务


Paste_Image.png

再点击Console Output可以看到终端输出


Paste_Image.png

这里就可以看到Fastlane的log了


Paste_Image.png

Done!

Paste_Image.png

已经上传了一个新包到fir

Paste_Image.png

好了,这样你就可以把这个服务共享给小伙伴们了,只需要轻轻一点,一步到位。


后记
Jenkins和Fastlane的功能真的非常强大!
这里只不过是很简单地组合起来用一下,Jenkins还可以做定时任务、权限管理、配置参数。
Fastlane拥有许多的Action,除了内测分发,还可以传包到TestFlight和AppStore。
你可以在Jenkins上配置灵活的参数来指定构建分支、触发命令;Fastlane的fastfile可以引用git仓库的文件的,所以你也可以分离项目和Fastlane配置文件。
如果你不喜欢fir,也可以用其他的分发平台,可能上传方式有点不同,例如Bugly是提供了Fastlane的自定义Action来做上传,功能会多一点,可以配置名称、描述、密码等。
......

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

推荐阅读更多精彩内容