前言简介

fastlane是一款运用ruby完结的跨渠道的继续集成东西,支持安卓和iOS渠道项目的继续集成实践,fastalne处理供给包含:初始设置、屏幕截图、打包、上传到测试渠道、部署等功能。本篇主要介绍fastlane的集成,以及合作jenkins主动化的搭建

iOS fastlane装置及运用:

(一)装置晋级bundle

  1. fastalne需求在ruby环境下才干装置,并且系统ruby版别需求高于2.6.2。假如bundle版别过低,需求先晋级bundle

  2. 装置晋级bundle履行指令行

     sudo gem install bundler -n/usr/local/bin
    
  3. cd到项目根目录输入bundle init 生成Gemfile文件,在此文件写入

    source "[https://gems.ruby-china.com](https://gems.ruby-china.com/)"
    gem "fastlane"
    
  4. 装置依靠库,履行指令行

     bundle install
    
  5. 更新Gemfile.lock文件的版别和依靠履行指令行

     bundle update
    

(二)Fastlane装置、初始化项目

  1. 运用HomeBrew装置(办理各种包)履行指令行 brew install fastlane进行装置。能够用指令fastlane --version来检查是否装置成功

    基于Jenkins的FastLane TestFlight 构建配置

  2. 装置成功今后cd到工程目录下初始化履行指令行fastlane init出现下图挑选你所需求的功能模块⬇️

    基于Jenkins的FastLane TestFlight 构建配置

  • 1、主动化截图 2、主动化beta分发至TestFlight 3、主动化App Store 分发 4、手动写主动化脚本(自定义发布渠道如pgyer,firm等)。
  1. 本篇介绍的是iOS上传到TestFLight,所以直接挑选2
    基于Jenkins的FastLane TestFlight 构建配置
  2. 输入苹果账号,等候一会儿,然后一直回车就能够了
    基于Jenkins的FastLane TestFlight 构建配置
  3. 构建完结会主动生成如下文件:⬇️
    基于Jenkins的FastLane TestFlight 构建配置

(三)运用fastlane主动化构建

  1. 初始化完结后,在Appfile文件内设置对应的开发者账号以及bundle id。fastFile中增加绕开二次验证的脚本。注:(假如挑选是2主动化beta分发至testFlight则不需求手动填写)
    基于Jenkins的FastLane TestFlight 构建配置
  • 注:keyid和issuer_id还有.p8文件是经过登陆苹果开发者中心-用户与访问-密钥,需账户持有者去创立并生成,生成一次能够所有项目通用
    基于Jenkins的FastLane TestFlight 构建配置
    基于Jenkins的FastLane TestFlight 构建配置
  1. 终端输入指令行fastlane beta,等候上传成功即可

(四)项目装备

  1. 电脑如已经装置fastalne,直接cd到项目跟目录下,运转fastalne init,即可生成对应文件,直接复制公用脚本文件,修正SCHEME称号,拷贝.p8文件到fastlane文件夹下即可

    基于Jenkins的FastLane TestFlight 构建配置
    基于Jenkins的FastLane TestFlight 构建配置

iOS jenkins合作fastlane主动化出包:

  1. 在jenkins中创立独自的任务,用来专门上传到testFlight分发,将脚本写到jenkins本地。将项目称号、git地址、代码分支,开发环境写成变量在脚本中去适配不同的项目,装备好了今后如下⬇️

    基于Jenkins的FastLane TestFlight 构建配置

  2. 项目需求分发时直接切换项目称号,和对应的选项,即可直接构建,等候上传成功即可

    基于Jenkins的FastLane TestFlight 构建配置

问题总结:

  1. Check out the few lines of raw xcodebuild output above for potential hints
  • 描述文件装备问题,项目内的描述文件需求装备正确,均运用distribution描述文件
  1. jenkins构建时分报错

    13:57:17: Transporter transfer failed.

    13:57:17: Please sign in with an app-specific password. You can create one atappleid.apple.com. (-22910)

    13:57:17: Your account has 2 step verification enabled

    13:57:17: Please go toappleid.apple.com/account/man…

    13:57:17: and generate an application specific password for

    13:57:17: the iTunes Transporter, which is used to upload builds

    13:57:17: To set the application specific password on a CI machine using

    13:57:17: an environment variable, you can set the

    13:57:17: FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD variable

  • 是因为苹果的双重身份验证导致的问题,需求在苹果开发者中心,用户中心,获取到对应的密钥key_idissuer_id、还有.p8文件,注:(p8文件需求保存到本地进行备份)放到对应的方位上,获取方式如上。获取完结的.p8文件放在fastlane脚本文件同目录下,然后在Fastfile文件中增加脚本

Fastlane相关脚本:

# You can find the documentation at https://docs.fastlane.tools
#
# For a list of all available actions, check out
#
#     https://docs.fastlane.tools/actions
#
# For a list of all available plugins, check out
#
#     https://docs.fastlane.tools/plugins/available-plugins
# Uncomment the line if you want fastlane to automatically update itself
# update_fastlane
SCHEME = "项目称号"
Method = "app-store"
default_platform(:ios)
def updateBuild
  currentTime = Time.new.strftime("%Y%m%d%H%M%S")
  increment_build_number(
    build_number: "#{currentTime}"
  )
end
api_key = app_store_connect_api_key(
  key_id: "xxx",
  issuer_id: "xxx",
  key_filepath: "./fastlane/xxx.p8",
  duration: 1200,
  in_house: false
)
platform :ios do
  desc "Description of what the lane does"
  lane :beta do
    updateBuild
    gym(
      scheme: SCHEME,
      workspace: "#{SCHEME}.xcworkspace",
      output_directory: "./fastlane/release",
      output_name: "#{SCHEME}.ipa",
      export_method: Method,
      export_xcargs: "-allowProvisioningUpdates",
      silent: true,
      clean: true
    )
    upload_to_testflight(
      api_key: api_key,
      ipa: "./fastlane/release/#{SCHEME}.ipa",
      skip_waiting_for_build_processing: true,
      skip_submission: true
    )
  end
end