利用fastlane进行项目的自动化构建

栏目: 服务器 · 发布时间: 5年前

内容简介:对使用安装方式一共有三种:

fastlane 是一套基于 ruby 开发的自动化构建工具,为项目的发布流程提供一整套解决方案。

2.安装

2.1 确保安装了最新版的Xcode command line tools

对使用 Xcode 进行开发的 iOS 开发者是标配,若发现提示没有安装的话尝试使用以下命令安装

xcode-select --install 
复制代码

2.2 选择安装方式

安装方式一共有三种:

homebrew installer script RubyGem
brew cask install fastlane 下载安装包,运行安装脚本 sudo gem install fastlane -NV

笔者项目中都使用到了 cocoapods 本地有 Ruby 环境,因此选择了第三种安装方案

2.3 安装bundler

若你的 ruby 环境中没有安装 bundler ,执行以下命令安装 bundler

sudo gem install bundler
复制代码

3.配置

进入项目的根目录中

3.1 初始化

fastlane init
复制代码

初始化的过程中会询问您的 APPID 和密码,请放心它只会把密码信息存在本地的 keychain 中,并不会传到云端服务器。

初始化的过程中会有四个选项,分别是为四种不同的任务创建配置:

TestFlight
Appstore

第一次创建可以选择第三项,它会自动检测当前项目的 App NameApp bundleID 并输出在控制台,若信息有误可以在确认信息的时候选择 n 然后去配置文件中手动编辑。接着会询问是否需要在 ITUADC 中创建项目,若选择了 y 会生成类似下图的目录结构,其中 AppfileFastfile 这两个核心文件必然会被创建。

fastlane
├── Appfile
├── Deliverfile
├── Fastfile
├── metadata
│   ├── copyright.txt
│   ├── en-US
│   │   ├── description.txt
│   │   ├── keywords.txt
│   │   ├── marketing_url.txt
│   │   ├── name.txt
│   │   ├── privacy_url.txt
│   │   ├── release_notes.txt
│   │   └── support_url.txt
│   ├── primary_category.txt
│   ├── primary_first_sub_category.txt
│   ├── primary_second_sub_category.txt
│   ├── secondary_category.txt
│   ├── secondary_first_sub_category.txt
│   ├── secondary_second_sub_category.txt
│   └── zh-Hans
│       ├── description.txt
│       ├── keywords.txt
│       ├── marketing_url.txt
│       ├── name.txt
│       ├── privacy_url.txt
│       ├── release_notes.txt
│       └── support_url.txt
└── screenshots
    ├── README.txt
复制代码

若选择了 n 可以在之后使用 fastlane 提供的对应功能的命令来生成配置文件。

笔者已经习惯了自己手动去设置相关的配置文件,一般都直接使用第四种方式创建任务。

3.2 使用Gemfile管理fastlane的版本和依赖

cocoapods 一样, fastlane 也可以使用 Gemfile 来管理对应的版本和依赖。

在执行 init 操作的时候会自动生成一个 Gemfile 内容如下:

source "https://rubygems.org"

gem "fastlane"
复制代码

可以直接在此处指定 fastlane 的版本信息。

致辞我们的初始化操作就完成了。

二、Fastlane的理念及组件

在上一步初始化的操作中,生成了两个核心文件 Appfile 以及 Fastfile ,其中 Appfile 存放的是你 appbundleID 以及 appID

Fastfile 是我们实际的自动化流程操作实现文件,我们会将相关动作在其中实现。

1.理念

Fastlane 有两个重要的概念:

  • action: 每一个动作就是action,对应一条命令。
  • lane: 某个操作流程,比如发布 appstore 的包的一系列 action 集合是一个lane,发布 adhoc 包又是一个lane

当运行 fastlane 命令行 工具 的时候会读取 fastlane 目录下的 Fastfile 文件,执行相应 lane 中的 action 操作

一个简单的流程:

lane :dependence_manager do
# 执行cocoapods属于一个action
cocoapods
# 执行carthage属于一个action
carthage
end
复制代码

2.组件

fastlane 提供了一套工具集,涵盖了发布流程大多数可能会使用到的操作,主要包括几个大类:

  • 测试: scan -自动生成测试工具,并可以生成 HTML 报告
  • 构建: gym -项目打包工具、 cocoapod -执行 pod install 操作
  • 截图: snapshot -截图工具(需要编写UI测试)、 framekit -生成带边框的截图
  • 项目: increment_build_number :增加项目构建次数
  • 签名: match -同步签名信息和项目 provision profilecert -同步 ADC 中的证书信息、 register_device -向 ADC 中添加新的设备
  • 文档: appledoc -根据源码生成 Apple 风格的代码文档
  • Beta: testflight -将项目发布至 testflight
  • 推送: pem -获取推送证书
  • 发布: deliver -将项目发布至 appstore
  • 版本控制: git pull -这就不用解释了
  • 通知: Slack -将打包信息告知你的开发组

fastlane 提供的工具非常之多,以上只列举了部分常用的组件,想了解更多请访问Fastlane Actions文档

3.第三方插件

fastlane 内部提供了足够多的工具,同时也支持第三方的插件接入。可以使用

fastlane search_plugins
复制代码

命令来查看所有可用第三方插件。

这里介绍两个最常用的插件:

  • firim: 将测试包发布到 firim
fastlane add_plugin firim
复制代码
  • pgyer: 将测试包发布到蒲公英
fastlane add_plugin pgyer
复制代码

三、Fastlane实践之旅

由于 fastlane 提供的组件相当之多,项目实践中并不一定都能用上。比如 snapshot 截图工具,由于公司的宣传页面都是使用的 UI 切图,笔者也一直没有具体实践的机会。这一部分只能介绍下笔者在项目中实际用过的组件,要是您想要了解的部分并没有被提及, fastlane 提供了十分详细的文档可以参考。

1.match-同步证书及provision profile利器

在多人开发的 iOS 项目中,大部分新手应该都闹出过删证书的笑话,尤其是一些小公司用的个人开发者账号去开发公司项目,成员之间就需要依靠证书的 P12 文件来进行证书的传递,这种方式效率又低管理又不方便。

fastlanematch 命令就提供了一套基于 git 的证书和 provision profile 管理方案。通过 match 生成的证书和 provision profile 将会同步到一个你指定的 git 地址,需要的成员通过 match 去下拉项目需要的证书到本地, match 会自己负责和 ADC 证书及 provision profile 的同步操作。

1.1 match初始化

通过命令

match init
复制代码

会让你输入一个git地址,这个地址就是证书的存放位置,同时会在项目中的 fastlane 中创建一个 matchfileFastfile 同级,其中的内容就是此 git 地址

1.2 生成证书和provision profile

# 生成appstore发布证书及provision profile
fastlane match appstore

# 生成adhoc发布证书及provision profile
fastlane match adhoc

# 生成调试证书
fastlane match development
复制代码

这一步 match 会检测 ADC 中是否有需要的证书和 provision profile 要是有就直接下载到本地,要是没有就直接在 ADC 中创建

match 自动创建的 provision profile 如图:

利用fastlane进行项目的自动化构建

完全不用自己手动在 ADC 中创建了是不是非常方面

1.3 在Xcode中配置证书和provision profile

到了这一步其实就和手动创建配置证书一样了,就不再赘述。

1.4 在Fastlanefile中配置证书操作的lane

贴上在项目中的实际配置

desc "Init develope environment"
  lane :config do
    match(type: "appstore", app_identifier: AppID, readonly: true)
    match(type: "adhoc", app_identifier: AppID, readonly: true)
    cocoapods
  end
复制代码

以上配置完成之后,团队新加入成员或者更换了设备后只要执行

fastlane config 
复制代码

命令即可同步整套开发发布环境,相当方便。

2.sigh-选择正确的provision profile

matchprovision profile 下载到本地, sigh 在打包之前确认对应使用的 provision profile

用法如下:

sync_code_signing(type: "appstore", 
                  readonly: true, 
            app_identifier: AppID)
复制代码

3.gym-编译打包工具

action 就是对应的 XcodeArchive 操作

# gym是build_app命令的一个别名
build_app(workspace: "xxxxxx.xcworkspace", 
              scheme: "xxxxxxxx",
              configuration: "release",
              # 输出.ipa文件的路径
              output_directory: "./Package/AppStore",
              export_method: "app-store")
复制代码

4.deliver-发布工具

fastlane init 的时候若是没有允许 fastlane 自动同步项目在 ADC 中的 metadata 。可以使用

fastlane deliver init 
复制代码

来创建 ADC 中需要的 metadata 文件,会在项目中的 fastlane 目录下创建 metadata 文件夹以及 Deliverfile 文件。

若是 ADC 中已经存在了 metadata 信息,则可以使用

fastlane deliver download_metadata
复制代码

来同步 ADC 上的metadata信息。

注意:若是 ADC 中存在已经编辑好的 metadata 没有同步到本地,则 deliver 上去的 metadata 会覆盖原有的 metadata

实际在 Fastfile 中的用法很简单就一行代码:

# deliver是upload_to_app_store的一个别名两个方法用法一致
upload_to_app_store
复制代码

5.完整发布appstore的lane

Fastfile 中如下:

desc "upload release version"
  lane :release do
    sync_code_signing(type: "appstore", 
                  readonly: true, 
            app_identifier: AppID)
    build_app(workspace: "xxxxx.xcworkspace", 
              scheme: "xxxxxxx",
              configuration: "release",
              output_directory: "./Package/AppStore",
              export_method: "app-store")
    upload_to_app_store
  end
复制代码

只要在命令行执行

fastlane release
复制代码

即可完全自动化发布的流程,极大的节省了开发者的时间。

6.发布到fir.im或蒲公英

upload_to_app_store 替换为 firimpgyer 插件提供的上传方法即可。

firim(firim_api_token:"xxxxxxxxxxxxxxxxxx")

四、总结

fastlane 是一套及其强大的自动化构建工具,善用 action 可以定制很多个性化操作,笔者只是抛砖引玉提供了一套满足最基本发布需求的方案。如果您有更好的方案,欢迎邮件交流。

由于笔者所在公司并没有专门的 iOS 打包机,很遗憾没有实践 fastlane + jekins 的机会。但身为软件开发工程师寻找更"轻松"的工作方式应该是我们一直以来的追求,笔者在今后的工作中也会持续在这个方向发力。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

iOS面试之道

iOS面试之道

故胤道长、唐巧 / 电子工业出版社 / 2018-7 / 59.00元

《iOS面试之道》是作者将多年的工作经验和积累,结合具体面试内容总结而成的。 《iOS面试之道》共分为3部分。第1部分为面试准备,详细介绍求职中遇到的基本问题,作者根据其多年的经验,在面试流程、简历投递、复习准备方面给出了完善的参考意见和建议。第2部分为算法知识。算法几乎是各种水平的程序员都要面对的考查内容。该部分采用Swift语言重新审视了多种数据结构和算法原理,可以说是为iOS开发者量身......一起来看看 《iOS面试之道》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具