fastlane使用 -- iOS从打包到发布的自动化处理

一、fastlane简介

fastlane是用Ruby语言编写的一套自动化工具集和框架,每一个工具实际都对应一个Ruby脚本,用来执行某一个特定的任务,而fastlane核心框架则允许使用者通过类似配置文件的形式,将不同的工具有机而灵活的结合在一起,从而形成一个个完整的自动化流程。

二、为什么选择fastlane

1、行命令实现打包工作,不需要时时等待操作下一步,节省打包的时间去做其他的事。
2、避免频繁修改配置导致可能出现的Release/Debug环境错误,如果没有检查机制,那将是灾难,即使有检查机制,我们也不得不重新打包,浪费了一次打包时间。毕竟人始终没有程序可靠,可以告别便利贴了。
3、通过配置自动上传到蒲公英,fir.im内测平台进行测试分发,也可以直接上传到TestFlight,iTunes Connect。
4、证书的同步更新,管理,在新电脑能够迅速具备项目打包环境。

一个需求完成后需要打包并上传至蒲公英供产品测试验收,而打包是一个复杂且需要谨慎的工作,大致的打包和上传蒲公英流程如下:

选择scheme -> 选择项目 -> Archive -> 选择打包方式 -> 选择手动管理证书 -> 选择配置文件 -> 导出IPA包 -> 登录蒲公英 -> 选择项目 -> 上传新版本 -> 选择IPA包 -> 填写说明 -> 发布

完成一个打包至少需要这13步,不能出现错误,所有的操作必须按部就班,一步步执行,而且如果出现bug需要重新打包,需要重新执行以上步骤,十分繁琐。

作为一名程序员,这不是我们想要的!!!
我们要以最简洁的方式,完成最复杂的工作,那么,fastlane就是最好的选择👏

三、如何使用fastlane

1.安装fastlane
终端执行sodu gem install fastlane -NV -n/usr/local/bin安装fastlane工具

2.初始化fastlane
终端进入项目所在目录,并输入fastlane init
会出现需要选择的初始化方式:

  1. 📸 Automate screenshots (自动截图)
  2. 👩‍✈️ Automate beta distribution to TestFlight (自动testfilght型配置)
  3. 🚀 Automate App Store distribution (自动发布型配置)
  4. 🛠 Manual setup - manually setup your project to automate your (需要手动配置内容)

选择2和3会要求填写Apple ID和密码,输入正确即可,后期还可以修改

3.安装蒲公英插件
终端执行fastlane add_plugin pgyer,提示成功后即可

注意:

fastlane初始化成功后会生成:fastlane文件夹(包含Appfile、Fastfile两个文件)和Gemfile、Gemfile.lock两个文件,其中
1.Appfile可配置打包需要的Apple id和team id
2.Fastfile为我们工作的主要文件,用于命令行调用和处理具体事务流程

四、项目配置

  1. gym初始化和配置
    a. 终端执行fastlane gym init,成功后生产Gymfile文件
    b. Gymfile文件中写入IPA包出包路径:output_directory(“./IPA”)

  2. 配置Apple ID和Team ID
    Appfile中添加Apple ID和Team ID格式如下:

apple_id “xxx@degnity.com
team_id “W6******3C”

  1. 配置Fastfile -- 重要(打包代码都在这里执行)
  • 自动添加设备到Apple Developer
  1. 创建一个由制表符tab分割的文件device.txt,将此文件放在项目目录下
    文件格式如下:

Device ID Device Name
135***********************5be Name
8si***********************8as Name

固定格式不得改变,每行包含一个设备号和一个用户名,最好将这个
文本复制下来或者在官网下载示例文件将里边的文本复制下来,再添加到txt文件中,然后修改设备号和名称即可

  1. 增加方法add_devices
lane :add_device do
    register_devices(
        devices_file: "./devices.txt"
    ) 
    #重新下载provisioning profile
    get_provisioning_profile
end
  • 版本号、构建号获取和自增操作
#获取构建版本号
get_build_number()
#获取版本号
get_version_number()
#构建版本号自增
increment_build_number()
#版本号自增
increment_version_number()

可自定义版本号或构建号:

#number为自定义内容
increment_build_number(build_number: “#{number}")
  • build_app打包配置
#构建版本配置
build_app(
  #项目路径 -- 本项目目录下初始化fastlane时不需要
    project: project_path,
    #出包方式:"app-store", "ad-hoc", "package", "enterprise", “development"
    export_method: "ad-hoc",
    #打包环境 -- "Release"、"Debug"、自定义等
    configuration: "Release",
    #需要打包的scheme
    scheme: "xxx_Dev",
    export_options: {
        #配置文件 -- 通过bundle id获取对应的配置文件
        provisioningProfiles: {
            "com.xxx.xxxtest" => "xxxtest_adHoc",
            "com.xxx.xxx" => "xxx_adHoc",
        }
    }
)
  • gym配置
gym(
    #打包前clean
    clean: "true",
    #出包方法 app-store, ad-hoc, package, enterprise, development
    export_method: "ad-hoc",
    #指定打的哪个scheme
    scheme: “xxxProject_Debug”,
    #指定project (未使用cocopods)
    project: “xxxx.xcodeproj”,
    #指定workspace (使用cocopods)
    workspace: “xxxx.xcworkspace”,
    #指定构建App的配置  Release、Debug、自定义
    configuration: “Debug",
    #输出目录
    output_directory: “./IPA",
    #输出名称
    output_name: "测试包"
    # include_symbols: "",#是否包含调试符号
    # include_bitcode: ""#是否开启bitcode
)
  • 上传至蒲公英
pgyer(api_key:"******", user_key:"******",update_description:"更新说明xxxxx")

至此所有打包文件都已配置完成,将这些代码按需求进行组合使用即可

五、学以致用

目前已完成的功能:

1、找到为止大众版Dev环境自动打包并上传至蒲公英
2、找到为止大众版Release环境自动打包并上传至蒲公英
3、找到为止签约版Dev环境自动打包并上传至蒲公英
4、找到为止签约版Release环境自动打包并上传至蒲公英
5、新项目只需添加bundle id和对应的配置文件即可使用自动打包和上传功能

将学习的fastlane使用到实际应用中,下面是根据需求完成的一个完整的打包流程(主要是Fastfile文件的代码部分):

platform :ios do

lane :update do
    puts "\033[35m请输入更新说明:\033[0m"
    pgyer_description = STDIN.gets.chomp()
    #构建号自增
    increment_build_number()
    
    build_app(
      #出包方法:app-store, ad-hoc, package, enterprise, development
      export_method: "ad-hoc",
      #环境配置
      configuration: "FastlaneTest_Debug",
      #打包scheme
      scheme: "FastlaneTest",
      export_options: {
        #配置文件 -- 通过bundleid来选择配置文件
        provisioningProfiles: ({
          "com.xxxxxxxx.xxxtest" => "xxxxtest_adHoc"
        })
     }
    )

    pgyer(api_key:"********", user_key:"********",update_description:pgyer_description)
  end

六、写在最后的话

1、fastlane简化了项目发布和测试打包的步骤,对提高工作效率有较大的帮助,而且实现方法都被开发者封装好成了一个个实用的方法,使用者只需要将这些方法进行组合和配置即可,简单方便。
2、学习过程中,查看了很多其他开发者编写的使用说明,但因为与别人遇到的问题不同或因为时间太久以前的方法都已失效,导致学习中走了一些弯路,最后都是从官方文档中得到了正确的解决方法,所以学习还是需要从官方文档着手。

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

推荐阅读更多精彩内容