Fastlane介绍

Fastlane是什么

Fastlane官网地址
fastlane类似js的任务流工具gulp的一个用于android/ios的任务流工具,使用ruby实现。
fastlane整合了一系列移动端开发中签名,编译,发布等工具,堪称打包神器。

image.png

fastlane不仅可以本地使用,还可以很好地和常用的部署工具集成。


image.png

安装

请参照官网

brew cask install fastlane

Fastlane怎么用

以IOS为例

1. 初始化fastlane

一个简单的demo

  1. 新建一个新的xcode工程
  2. 在工程目录下,运行fastlane init
  3. 选择4. Manual setup , 初始化后会在工程目录下生成fastlane的目录,里面有两个文件FastfileAppfile,Fastfile是整个任务流的配置文件,Appfile是app信息配置文件。

接下来我们将深入Fastfile,以配置我们的任务流。fastlane的运行机制是插件化,每个任务称为一个lane,可以理解为一个task,每个lane可以有多个action,action可以理解为插件。

目前官方开发的插件几乎覆盖了整个发布流程。
fastlane actions

当然,我们也可以很方便地定制自己的插件,真的非常简单。插件使用ruby编写,如果不会ruby,你甚至可以在ruby中调用shell(当然,ruby比shell方便多了)

2. 生成app

使用 fastlane produce 在ITunes Connect (简称itc)上生成一个新的APP
详细使用地址见:
https://docs.fastlane.tools/actions/produce/#produce

下面是一个简单的任务。

default_platform(:ios)
platform :ios do
  desc "下面就是一个个的任务,这里称之为lane"
  # 新创建一个app
  lane :new_app do
      produce(
        username: 'test@qq.com',
        app_identifier: 'com.compnay.TestProject',
        app_name: '测试工程',
        language: 'English',
        app_version: '1.0',
        sku: '123', # 注意,sdk必须大于2个字符
        #team_name: 'SunApps GmbH', # only necessary when in multiple teams

        # Optional
        # App services can be enabled during app creation
        enable_services: {
          #apple_pay: "on",               # Valid values: "on", "off"
          push_notification: "on",       # Valid values: "on", "off"
        }
      )
  end
end

运行 fastlane new_app 即可运行该任务。全命令行自动化,这样才能做到自动化打包发布。

3. 证书管理

在itc生成新的app后,就需要申请证书进行开发了。
Fastlane开发了Match工具进行管理。
Match使用git对证书进行管理。

image.png

团队成员无需要再相互传递证书文件。在fastlane中可以配置证书,自动进行匹配,下载,安装。让开发人员可以专心于业务开发,而无须关注环境细节。

match的使用方法:

  1. 新建一个git工程如 certificates,配置好远程仓库,如gitlab,github。
  2. 在工程目录下运行 fastlane match init,该命令会在工程目录下生成Matchfile配置文件,进行账号工程等配置。
  3. 使用 fastlane match appstore 生成证书。appstore是证书类型,可以在matchfile中配置,类型就是apple开发者网站的:development,adhoc,appstore这几种。生成后,证书会自动提交到git仓库进行管理。

一个简单的配置文件如下:

git_url("git@code.company.com:amazing_ios/certificates.git")
# The default type, can be: appstore, adhoc, enterprise or development
type("development")
username("test@qq.com")
app_identifier(["com.compnay.TestProject"])

有了配置文件,可以直接运行fastlane match即可。

Fastlane也可以管理多团队账号的证书,在certificates工程checkout一个新分支,再运行match命令即可。
其他成员机器上运行match时使用git_branch参数指定分支即可。

有个证书,接下来可以进行开发了。
papapa...享受了一阵美好时光,代码写好了。

编译

编译用的gym

image.png

xcode自带的xcodebuild的编译命令如下:

xcodebuild clean archive -archivePath build/MyApp \
                         -scheme MyApp
xcodebuild -exportArchive \
           -exportFormat ipa \
           -archivePath "build/MyApp.xcarchive" \
           -exportPath "build/MyApp.ipa" \
           -exportProvisioningProfile "ProvisioningProfileName"

稍显复杂。使用fastlane命令如下(官网上有很多别名,build_app/build_ios_app都是这个):

fastlane gym

gym可以很方便地配置参数,而且编译速度更快,再加上对错误有更友好的提示。
gym的参数也可以放到Gymfile文件中单独保存。

编译过程中非常容易遇到证书问题,确保bundle名字一致

编译完成后会生成ipa文件和dSYM文件。

Xcode编译项目后,我们会看到一个同名的 dSYM 文件,dSYM 文件是保存 16 进制函数地址映射信息的中转文件。如果Debug调试模式的话,我们可以根据log的输出轻松定位到导致crash的原因,但当应用 release 模式打包或上线后出现Crash,这个时候就需要通过出错的函数地址去查询 dSYM 文件中程序对应的函数名和文件名。

上传审核

最开始我们生成了一个APP,所以现在我们只需要上传APP的信息即可。
fastlane使用deliver工具进行上传。
deliver的详细介绍见:https://docs.fastlane.tools/actions/deliver/

可以理解为就是把itc后台的表单挪到的命令行,如app关键字,标题,权限,审核信息等,这样整个流程可以自动化完成。

信息可以单独写在文件,或者直接在命令行参数里面指定。
先执行fastlane deliver init初始化上传信息。
接下来,完善信息,执行fastlane deliver上传。

简单的demo如下:


更多的demo可以参见:
https://github.com/fastlane/examples

自动化流程

fastlane是把这些命令串起来,接下来,我们需要把整个开发流程串起来。简单的分工如下:


image.png

CI集成

todo

其他

设备管理

 lane :register_devices do
    register_devices(
        username: "xxx@qq.com",
        devices: {
           "Luka iPhone 6" => "1234567890123456789012345678901234567890"
        }
    )
end
# 加新设备后,同步证书
lane :sync_cert do
    match(
        type:"development",
        # 证书仓库地址
        git_url:"git@code.37ops.com:amazing_ios/certificates.git",
        # 分支以区别不同账号
        #git_branch: "fengzgu@sohu.com", 
        # appid
        username: "fengzgu@sohu.com",
        # 
        app_identifier:"com.2345.TestProject",
        # 设置只读权限,防止证书被修改
        readonly:true,
        # 如果有新设备,加上这个字段可以生成新的provisioning file
        force_for_new_devices: true, 
    )
end

Fastlane原理介绍

fastlane使用spaceship 与苹果进行交互,具体细节请看:
https://github.com/fastlane/fastlane/tree/master/spaceship#technical-details

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

推荐阅读更多精彩内容

  • 什么是Fastlane Fastlane是一套非常实用而强大的组件,其目的主要是为了实现iOS和Android的发...
    陈乞糍阅读 4,325评论 1 3
  • fastlane运行所需要的环境: OS X 10.9以上 Ruby 2.0 以上 Xcode 拥有一个开发者账号...
    阿姣_0405阅读 2,956评论 0 4
  • 毋庸置疑,Jenkins对我们打包的帮助还是很大的——被测试的同学追着要IPA包的日子终于一去不复返了。但作为追求...
    _VisitorsZsl阅读 1,155评论 0 4
  • 毋庸置疑,Jenkins对我们打包的帮助还是很大的——被测试的同学追着要IPA包的日子终于一去不复返了。但作为追求...
    iOS逆向开发阅读 1,544评论 2 10
  • 前言:一直有听过脚本一键打包审核,但是自己一直没在意。在微信公众号看到ios一键打包的文章,突然想想自己每次从打包...
    光彩影阅读 5,604评论 1 42