前言
match是一种全新的证书和配置文件管理工具,它会把所有需要用到的证书传到git私有库上,任何需要配置的机器直接用match同步证书。团队所有成员共享一份代码签名,以减免不必要的证书创建。
本文主要介绍
match
的使用方法,另外顺带讲一下另外两种证书配置方法cert
和sigh
。如果你还对Fastlane
不了解,请先阅读我上一篇文章《iOS开发fastlane从入门到入土(一):自动打包》
一、CredentialsManager
证书配置之前,必须先讲一下CredentialsManager
凭据管理工具。
这个工具主要是提供登录iTunes connect 的凭证,一般在fastlane初始化的时候,如果选择打包到appstore,会提示你添加登录凭证。
命令行方式
- 添加Credential
fastlane fastlane-credentials add --username [email protected]
Password: *********
Credential [email protected]:********* added to keychain.
- 移除Credential
fastlane fastlane-credentials remove --username [email protected]
password has been deleted.
使用环境变量
以上方式会将[email protected]自动存入“钥匙链”,如果你不想存入“钥匙链”可以通过设置环境变量”FASTLANE_DONT_STORE_PASSWORD”为”1”
在.env
文件中加入:
#iTunes connect登录用户名
FASTLANE_USER = "[email protected]"
#iTunes connect登录密码
FASTLANE_PASSWORD = "xxxxxxx"
#不存入“钥匙链”
FASTLANE_DONT_STORE_PASSWORD = "1"
更多详情见github
二、Spaceship
spaceship
暴露了 Apple Developer Center 和 iTunes Connect API。这些快速和强大的API已经是 fastlane 的一部分,能够实现更多 fastlane 的高级功能。脚本化 Developer Center 的工作流从未如此简单。
spaceship
已经是fastlane
的一部分了,很多 fastlane tools 已经使用了 spaceship
,比如 sigh
, cert
, produce
, pilot
和 boarding
。
使用
在命令行中尝试运行 fastlane spaceship
,然后就会自动启动 spaceship playground
。这要求你使用 sudo gem install pry
安装 pry
。pry
不会默认安装,因为大部分的fastlane用户不需要 spaceship playground
。你可以在 Gemfile
文件里添加 pry
依赖。
两步验证[1]
如果你的苹果账户开启了两步验证,将会自动询问你使用手机进行验证。结果会话将会存储在 ~/.spaceship/[email]/cookie
中。这个会话在一个月内是有效的,当然没有办法真的等到一个月后来测试。
使用以下命令生成一个web session:
fastlane spaceauth -u [email protected]
这个将会给你授权,并提供一个会话字符串:
export FASTLANE_SESSION='---\n- !ruby/object:HTTP::Cookie\n name: DES5c148586dfd451e55afbaaa5f62418f91\n value: HSARMTKNSRVTWFla1+yO4gVPowH17VaaaxPFnUdMUegQZxqy1Ie1c2v6bM1vSOzIbuOmrl/FNenlScsd/NbF7/Lw4cpnL15jsyg0TOJwP32tC/NguPiyOaaaU+jrj4tf4uKdIywVaaaFSRVT\n domain: idmsa.apple.com\n for_domain: true\n path: "/"\n secure: true\n httponly: true\n expires: 2016-04-27 23:55:56.000000000 Z\n max_age: \n created_at: 2016-03-28 16:55:57.032086000 -07:00\n accessed_at: 2016-03-28 19:11:17.828141000 -07:00\n'
从 ---\n 开始复制所有的东西,然后当做环境变量提供,配置环境变量vim ~/.bash_profile
,变量名是 FASTLANE_SESSION,你也可以放在.env
里,不过需要去掉export,效果一样。
FASTLANE_SESSION='---\n- !ruby/object:HTTP::Cookie\n name: myacinfo\n value: xxx\n'
发包
如果你想通过fastlane上传构建到TestFlight/App Store Connect,你必须生成并使用一个特殊密码:
- 访问 appleid.apple.com/account/manage
- 生成一个新的特殊密码
- 使用环境变量名
FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD
提供这个特殊密码.
更多详情见github
三、Cert、Sigh使用
Cert
当新证书需要创建时,cert
会执行以下步骤:
- 创建一个新的私钥
- 创建一个新的签名请求
- 生成,下载并安装证书
- 导入所有生成文件到钥匙串中
cert
不会撤销您现有的证书。如果您不能创建更多证书,cert将引发异常,这意味着您必须撤销现有的证书之一,以便为新证书腾出空间。
cert
无法从Apple Developer Portal下载现有证书+私钥,因为私钥永远不会离开您的计算机。
示例如下:
lane :create_cert do
cert(
username: ENV['APPLE_ID'], # Apple ID
team_id: ENV['TEAM_ID'], # Team ID
development: true, # 创建一个开发证书
force: "false", # 即使存在现有证书,也要创建证书,默认为false
filename: "dev_cert", # 存储文件名
output_path: "./certs/development", # 存储所有证书和私钥的目录的路径
)
end
更多cert的详细用法,请参考cert doc
Sigh
Sigh
可以创建、更新、下载和修复配置文件(使用一个命令)。它支持App Store、Ad Hoc、Development 和 Enterprise,并支持一些不错的功能,比如自动添加所有测试设备。
你可以通过下面这行命令列出本地安装的所有provisioning profiles:
fastlane sigh manage
也可以删除所有失效的provisioning profiles:
fastlane sigh manage -e
provisioning profiles所在目录:~/Library/MobileDevice/Provisioning Profiles
。
你可以使用ProvisionQL在Finder中快速预览profiles文件,使用brew cask install provisionql
快速安装。
使用示例如下:
lane :create_adhoc_profile do
#如果没有在Apple Developer创建证书的话,get_certificates会帮你自动创建证书
sigh(
username: ENV['APPLE_ID'], # APPle ID
team_id: ENV['TEAM_ID'], # team ID
app_identifier: ENV['APP_IDENTIFIER'], # bundle id
# cert_id: xxx, # 使用的证书id
provisioning_name: 'com.xx.FastLane_AdHoc', # 开发者中心上面的描述文件名称
ignore_profiles_with_different_name: true, # 与provisioning_name参数联合使用,true:当描述文件名称完全匹配provisioning_name时才下载,false:不完全匹配也下载
force: true, # 更新描述文件并忽略其状态,同时自动为ad hoc profiles添加所有设备
filename: "xxx.mobileprovision", # 存储文件名
output_path: "./profiles/adhoc", # 存储的路径
skip_install: false, # 默认会自动添加证书到你的本地机器上,设置该参数可以跳过该步骤
# development: false, # 更新开发证书而不是生产证书
# readonly: true, # 只获取,不生成新的
adhoc: true # true:生成AdHoc profiles,false:生成App Store Profiles
)
end
更多sigh的详细用法,请参考sigh doc
四、Match
建议使用这种方式管理证书,在使用match管理证书前,要先注册一个私有仓库,名字官方建议为certificates,本文管理仓库放在码云上。
初始化
进入项目目录执行
fastlane match init
系统会提示输入git仓库的链接,需确保当前账户有git仓库的访问权限。执行完成后会在fastlane目录下生成一个Matchfile文件,里面保存着你刚才输入的git仓库链接,以后操作match,会默认读取该URL。
git_url("https://gitee.com/xxx/certificates.git")
storage_mode("git")
type("development") # The default type, can be: appstore, adhoc, enterprise or development
# app_identifier(["tools.fastlane.app", "tools.fastlane.app2"])
# username("[email protected]") # 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
删除旧证书和pp文件
官方建议通过命令清除之前的证书和描述文件,毕竟我们想从一个干净的环境出发。
企业账号慎用,销毁描述文件可能会导致App无法打开。
fastlane match nuke development ---开发证书
fastlane match nuke distribution ---apple store 和 adhoc使用此命令
fastlane match nuke enterprise ---企业证书
生成证书和pp文件
lane :manageCert do
match(
git_url: "path", # 指定包含所有证书的git私有仓库地址
#git_branch: "branch", # 指定所使用的git分支
type: "appstore", # 指定创建证书的类型,可用选项:appstore, adhoc, development, enterprise
username: ENV['APPLE_ID'], # APPle ID
team_id: ENV['TEAM_ID'], # team ID
app_identifier: ["tools.fastlane.app", "tools.fastlane.sleepy"], # 程序的bundle identifier(s),多个时用逗号分隔
readonly: true, # true:仅获取已经存在的证书和描述文件,而不生成新的
force: true, # 每次执行match时,是否更新描述文件
force_for_new_devices: true, # 当Apple Developer Portal上的设备数量发生变化时,是否更新描述文件
output_path: "./certs/development", # 导出的证书密钥以及profile文件路径
verbose: true # 打印详细信息
)
end
首次执行时,会要求输入一个密码,用来对证书进行加密,后续其他机器获取证书时使用该密码进行解密,输入密码后继续按照终端提示进行下一步操作,match会创建新的证书和描述文件,之后执行会拉取仓库已经存在的。
完成后,git仓库就会生成对应的certs及profiles文件夹来存放证书和配置文件。
注册新设备
- 注册单台设备
fastlane run register_device
- 注册多台设备
desc "注册设备"
lane :add_devices do
register_devices(
#devices_file: "./devices.txt", # 指定包含设备信息的文件路径,文件具体格式参考https://devimages.apple.com.edgekey.net/downloads/devices/Multiple-Upload-Samples.zip
devices: {
"Luka iPhone 6" => "1234567890123456789012345678901234567890",
"Felix iPad Air 2" => "abcdefghijklmnopqrstvuwxyzabcdefghijklmn"
}, # 指定要注册的设备列表,格式为:设备名称 => UDID
username: "[email protected]" # 设置Apple ID
)
end
团队管理
关掉Automatically manage signing,使用手动管理证书。
新成员接入时,执行以下命令获取对应的证书文件:
fastlane match development --readonly
fastlane match adhoc --readonly
fastlane match appstore --readonly
更多match的详细用法,请参考match doc
五、PEM
如果需要有效的推送配置文件,pem将创建新的.pem、.cer和.p12文件。pem不包括将文件上载到服务器。
lane :notification_cert do
pem(
development: true, # true:更新开发推送证书,false:更新生产推送证书
generate_p12: true, # 生成p12和pem文件
force: true, # true:即使旧推送描述文件依然可用,仍然创建新的推送描述文件
app_identifier: 'com.apple.xxx', # Bundle ID,
save_private_key: true, #保存RSA私钥
p12_password: '123456', # 所生成p12文件的密码
pem_name: 'notifier', #pem文件名
username: ENV['APPLE_ID'],
team_id: ENV['TEAM_ID'],
output_path: "./certs/development",
new_profile: proc do |profile_path| # 如果生成了新的推送描述文件,该block会被调用
puts profile_path # 新的PEM文件的绝对路径
# 添加上传PEM文件到服务器的代码
end
)
end
-
两步验证的处理办法 ↩