iOS小白成长之路

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

2019-02-13  本文已影响31人  李有钱灬

一、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 -- 重要(打包代码都在这里执行)
  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(
  #项目路径 -- 本项目目录下初始化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(
    #打包前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、学习过程中,查看了很多其他开发者编写的使用说明,但因为与别人遇到的问题不同或因为时间太久以前的方法都已失效,导致学习中走了一些弯路,最后都是从官方文档中得到了正确的解决方法,所以学习还是需要从官方文档着手。

上一篇下一篇

猜你喜欢

热点阅读