Fastlane介绍

作者: opwt | 来源:发表于2018-05-25 10:36 被阅读347次

    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

    相关文章

      网友评论

        本文标题:Fastlane介绍

        本文链接:https://www.haomeiwen.com/subject/pgxooxtx.html