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

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

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

iOS菜鸟福利!带你一键轻松搞定项目构建、封包、上传_第1张图片
Paste_Image.png

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

iOS菜鸟福利!带你一键轻松搞定项目构建、封包、上传_第2张图片
Paste_Image.png

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

以下是需要用到的招式:

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

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

1.准备一个project

1.1创建项目

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

iOS菜鸟福利!带你一键轻松搞定项目构建、封包、上传_第3张图片
Paste_Image.png

1.2配置项目

1.2.1配置一下证书

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

iOS菜鸟福利!带你一键轻松搞定项目构建、封包、上传_第4张图片
Paste_Image.png

1.2.2配置build number

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

iOS菜鸟福利!带你一键轻松搞定项目构建、封包、上传_第5张图片
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
iOS菜鸟福利!带你一键轻松搞定项目构建、封包、上传_第6张图片
Paste_Image.png

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

2.2初始化Fastlane

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

fastlane init
iOS菜鸟福利!带你一键轻松搞定项目构建、封包、上传_第7张图片
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”文件

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

iOS菜鸟福利!带你一键轻松搞定项目构建、封包、上传_第8张图片
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
iOS菜鸟福利!带你一键轻松搞定项目构建、封包、上传_第9张图片
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



跑起来,孩儿们!

iOS菜鸟福利!带你一键轻松搞定项目构建、封包、上传_第10张图片
Paste_Image.png

iOS菜鸟福利!带你一键轻松搞定项目构建、封包、上传_第11张图片
Paste_Image.png

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

Paste_Image.png
2.3.3安装fir-cli工具

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

在fir注册后获取你的token。

iOS菜鸟福利!带你一键轻松搞定项目构建、封包、上传_第12张图片
Paste_Image.png
2.3.4完善fastlane脚本

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

iOS菜鸟福利!带你一键轻松搞定项目构建、封包、上传_第13张图片
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
iOS菜鸟福利!带你一键轻松搞定项目构建、封包、上传_第14张图片
Paste_Image.png

中间省略......

iOS菜鸟福利!带你一键轻松搞定项目构建、封包、上传_第15张图片
Paste_Image.png

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

iOS菜鸟福利!带你一键轻松搞定项目构建、封包、上传_第16张图片
Paste_Image.png

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

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

3. Jenkins的安装使用

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

java -jar jenkins.war

配置完进来就是这样子

iOS菜鸟福利!带你一键轻松搞定项目构建、封包、上传_第17张图片
Paste_Image.png

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

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

iOS菜鸟福利!带你一键轻松搞定项目构建、封包、上传_第18张图片
Paste_Image.png
iOS菜鸟福利!带你一键轻松搞定项目构建、封包、上传_第19张图片
Paste_Image.png

3.2创建Jenkins任务

3.2.1新建任务
iOS菜鸟福利!带你一键轻松搞定项目构建、封包、上传_第20张图片
Paste_Image.png
3.2.2配置git
iOS菜鸟福利!带你一键轻松搞定项目构建、封包、上传_第21张图片
Paste_Image.png
3.2.3配置调用Fastlane的命令
iOS菜鸟福利!带你一键轻松搞定项目构建、封包、上传_第22张图片
Paste_Image.png
3.2.3跑起来
iOS菜鸟福利!带你一键轻松搞定项目构建、封包、上传_第23张图片
Paste_Image.png

点击正在构建的任务


iOS菜鸟福利!带你一键轻松搞定项目构建、封包、上传_第24张图片
Paste_Image.png

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


iOS菜鸟福利!带你一键轻松搞定项目构建、封包、上传_第25张图片
Paste_Image.png

这里就可以看到Fastlane的log了


iOS菜鸟福利!带你一键轻松搞定项目构建、封包、上传_第26张图片
Paste_Image.png

Done!

iOS菜鸟福利!带你一键轻松搞定项目构建、封包、上传_第27张图片
Paste_Image.png

已经上传了一个新包到fir

iOS菜鸟福利!带你一键轻松搞定项目构建、封包、上传_第28张图片
Paste_Image.png

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


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

你可能感兴趣的:(iOS菜鸟福利!带你一键轻松搞定项目构建、封包、上传)