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

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


image.png
  • 其他机器来获取证书以及配置文件
    因为生产的时候进行了加密, 这里则需要密码进行解密
astlane match development --readonly
fastlane match adhoc --readonly
fastlane match appstore --readonly
image.png

自动打包

  • Appfile 文件中的内容
app_identifier("com.xxxx.xxxx") # The bundle identifier of your app
apple_id("xxxxxxx@xxxx.com") # 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)去掉,改为相对路径

image.png

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

推荐阅读更多精彩内容