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
仓库下会出现相应的目录以及文件
- 其他机器来获取证书以及配置文件
因为生产的时候进行了加密, 这里则需要密码进行解密
astlane match development --readonly
fastlane match adhoc --readonly
fastlane match appstore --readonly
自动打包
- 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
- 使用
- cd到项目目录
- 打包并上传至app-store
fastlane app_store name:项目名称
- 打包并上传至app-store
fastlane app_store name:项目名称
- 打包并上传测试版至testflight
fastlane beta_testflight name:项目名称
- 打包并上传至蒲公英
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)
去掉,改为相对路径