fastlane: Match管理证书 & 自动打包action

Match

Match是fastlane中的一个插件,他的作用是轻松地在整个团队中同步您的证书和配置文件。在使用之前需要创建一个私有的git仓库,并且xcode要使用手动管理证书,不能使用自动管理证书

  • 安装以及初始化
# 安装
[sudo] gem install match
# 初始化 cd到项目目录下
fastlane match init
# 根据提示进行相关设置

执行成功后会在fastlane目录下生成Matchfile文件,可以进行相关配置

git_url("https://用户名:密码@github.com/用户名/仓库.git")
storage_mode("git")

type("development") # The default type, can be: appstore, adhoc, enterprise or development

app_identifier("bundle id")
username("苹果开发者账户") # Your Apple Developer Portal username

# For all available options run `fastlane match --help`
# Remove the # in the beginning of the line to enable the other options

# The docs are available on https://docs.fastlane.tools/actions/match
  • 删除旧的证书以及配置文件
fastlane match nuke development
fastlane match nuke distribution
  • 生成新的证书以及配置文件
    第一次执行的时候 ,会让你输入一个密码,用来对证书的加密。后面其他机器获取证书的时候会使用到这个密码
在工程目录下分别执行
fastlane match development
fastlane match adhoc
fastlane match appstore

仓库下会出现相应的目录以及文件


fastlane: Match管理证书 & 自动打包action_第1张图片
image.png
  • 其他机器来获取证书以及配置文件
    因为生产的时候进行了加密, 这里则需要密码进行解密
astlane match development --readonly
fastlane match adhoc --readonly
fastlane match appstore --readonly
fastlane: Match管理证书 & 自动打包action_第2张图片
image.png

自动打包

  • Appfile 文件中的内容
app_identifier("com.xxxx.xxxx") # The bundle identifier of your app
apple_id("[email protected]") # Your Apple email address
itc_team_name "xxxxxx" # Apple ID 中存在多个team 设置team名称 不设置的话 打包过程中需要选择


# For more information about the Appfile, see:
#     https://docs.fastlane.tools/advanced/#appfile

  • Fastfile 文件中的内容
# This file contains the fastlane.tools configuration
# 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

default_platform(:ios)

platform :ios do

  begin

    buildN = get_build_number() #get_build_number,获取工程中的build number
    last_build = buildN.to_i 

  end


  lane :match_all do
        sh "fastlane match development --readonly"
        sh "fastlane match adhoc --readonly"
        sh "fastlane match appstore --readonly"
  end


  desc "打包并上传至app-store"

  lane :app_store do |options|
    name = options[:name]

    now_build = last_build + 1

    #增加build number
    increment_build_number(
      build_number: now_build
    )

    #导出ipa包
    gym(
      clean: true,
      scheme: name,
      export_method: "app-store",
      output_directory: "./fastlane/build",
      output_name: "#{name}_appstore_#{now_build}"
    )

    #上传至app-store
    deliver(
      force: false,              #是否跳过HTML验证报告,默认false
      skip_metadata: false,      #是否跳过上传metadata,默认false
      skip_screenshots: false    #是否跳过上传屏幕截图,默认false
    )
  end



  desc "打包并上传测试版至testflight"
  lane :beta_testflight do |options|
    name = options[:name]
    now_build = last_build + 1
    #增加build
    increment_build_number(build_number: now_build)
    #编译App
    gym(
      clean: true,
      scheme: name,
      configuration: "Release",
      export_method: "ad-hoc",
      output_directory: "./fastlane/build",
      output_name: "#{name}_testflight_#{now_build}",
      # include_bitcode: false, #bitcode
      export_options: {   #指定配置文件等设置,如果在Xcode中配置好了可不传
      provisioningProfiles: { 
        "bundle id" => "match AdHoc 配置文件名称",
      }
    }
    )
    #上传至testFlight
    upload_to_testflight(
      skip_waiting_for_build_processing: true  #是否跳过等待apple处理的过程
    )
  end



  lane :adhoc_pgyer do |options|

    name = options[:name]

    gym(
      clean:true, # 是否清空以前的编译信息 true:是
      scheme: name, # 自己项目名称
      workspace: "#{name}.xcworkspace", # 自己项目名称xcworkspace(使用cocoapods才会生成)
      export_method:"ad-hoc", #app-store,ad-hoc,enterprise,development
      configuration:"AdHoc",
      output_directory:"./fastlane/build", # 打包后的 ipa 文件存放的目录
      export_xcargs: "-allowProvisioningUpdates", #访问钥匙串
      output_name: "#{name}.ipa",# ipa 文件名
      silent:true,#隐藏没有必要的信息
      export_options: {
        provisioningProfiles: {
        "bundle id" => "match AdHoc 配置文件名称",# bundleid,打包用的证书名字
        }
      }
    )

    pgyer(
      api_key: "xxxxx", # 从蒲公英项目详情中获取的 apikey
      user_key: "xxxxx", # 从蒲公英项目详情中获取的 userkey
      password: "xxxxx", # 密码
      update_description: "fastlane 测试"#"description" # 本次测试更新的文字说明(参数设置)
    )
  end

end

  • 使用
  1. cd到项目目录
  2. 打包并上传至app-store
fastlane app_store name:项目名称
  1. 打包并上传至app-store
fastlane app_store name:项目名称
  1. 打包并上传测试版至testflight
fastlane beta_testflight name:项目名称
  1. 打包并上传至蒲公英
fastlane adhoc_pgyer name:项目名称

遇到的问题

Before being able to increment and read the version number from your Xcode project, 
you first need to setup your project properly. Please follow the guide at 
https://developer.apple.com/library/content/qa/qa1827/_index.html

解决方法:可以查看提示中的网址 https://developer.apple.com/library/content/qa/qa1827/_index.html 进行设置

Cannot set build number with plist path containing $(SRCROOT)
Please remove $(SRCROOT) in your Xcode target build settings

解决方法:将inif.plist file 值中的$(SRCROOT)去掉,改为相对路径

fastlane: Match管理证书 & 自动打包action_第3张图片
image.png

你可能感兴趣的:(fastlane: Match管理证书 & 自动打包action)