传送门:
fastlane 自动化01----初识
fastlane 自动化02----证书签名
fastlane 自动化03----构建、编译
fastlane 自动化04----分发、上传(未完待续。。。)
证书配置相关Action
Action | Description | Supported Platforms |
---|---|---|
sigh | Alias for the get_provisioning_profile action |
ios, mac |
match | Alias for the sync_code_signing action |
ios |
cert | Alias for the get_certificates action |
ios |
import_certificate | Import certificate from inputfile into a keychain | ios, android, mac |
update_project_provisioning | Update projects code signing settings from your provisioning profile | ios, mac |
resign | Codesign an existing ipa file | ios |
register_devices | Registers new devices to the Apple Dev Portal | ios, mac |
automatic_code_signing | Configures Xcode's Codesigning options | ios, mac |
register_device | Registers a new device to the Apple Dev Portal | ios |
sync_code_signing | Easily sync your certificates and profiles across your team (via match) | ios |
get_certificates | Create new iOS code signing certificates (via cert) | ios |
get_provisioning_profile | Generates a provisioning profile, saving it in the current folder (via sigh) | ios, mac |
install_provisioning_profile | Install provisioning profile from path | ios, mac |
fastlane里面有好多action都有两个名称,例如
sigh
& get_provisioning_profile
、match
&sync_code_signing
、cert
&get_certificates
,他们其实都是一个action。
着重介绍一下几个action:
- 从钥匙串的偏好设置中从证书颁发机构请求证书的过程,即生成CSR的过程(有公钥和私钥生成),然后生成数字签名证书.cer
,用的是get_certificates
这个action来实现
- 生成的provisionfile中包含certificate、device、notifiaction、appid等相关描述的过程可以用 get_provisioning_profile
这个action来实现。
- 自动同步管理、生成证书和配置文件,可以用
match
来协作。
Note: It is recommended to use match according to the codesigning.guide for generating and maintaining your certificates. Use cert directly only if you want full control over what's going on and know more about codesigning.
好吧,官方意思是说 你不是闲的难受
的话,还是推荐直接用match
(sync_code_signing
)管理所有的跟数字证书和配置文件相关☺.
Action具体用法
-
register_devices
注册新手机uuid.
register_devices(
devices:{
"phonename1" => "A123456789012345678901234567890123456789",
"phonename2" => "B123456789012345678901234567890123456790"
},
username:"[email protected]"
)
username
是可选项,在Appfile
中设置了app_id
,或者在Fastfile
中设置环境变量NV['DELIVER_USER']
都可。
devices
参数可以改为导入文件的方式:devices_file: "./devices.txt"
,其中txt中的格式是
Device ID
Device Name
A123456789012345678901234567890123456789
NAME1
B123456789012345678901234567890123456789
NAME2
-
match
生成、管理、更新同步证书
首先 $ fastlane action match
查看一下match
有哪些参数:
Key | Description | Default |
---|---|---|
type |
设置profile类型, 可以是 appstore, adhoc, development, enterprise | development |
readonly |
是否只读,若为是,则只能获取证书 描述文件等,若为否,则有编辑权限 | false |
generate_apple_certs |
专为xcode11+的版本创建证书 | * |
skip_provisioning_profiles |
跳过同步provision profile | false |
app_identifier |
app bundleID,如果多个用逗号分隔 | * |
username |
苹果的开发账号 | * |
team_id |
team_id,可能有多个 | * |
team_name |
小组名,可能有多个 | * |
storage_mode |
保存策略 | git |
git_url |
存放cer、p12的git 仓库地址 | |
git_branch |
分支名 | master |
git_full_name |
用于commit提交的全名 | |
git_user_email |
用于commit的email | |
clone_branch_directly |
只克隆当前分支 | false |
git_basic_authorization |
Use a basic authorization header to access the git repo (e.g.: access via HTTPS, GitHub Actions, etc), usually a string in Base64 ,一般是 username:password 这样的形式 |
|
keychain_name |
导入的要钥匙串名称 | login.keychain |
keychain_password |
你mac的密码,用于将内容写入本地钥匙串 | |
force |
每次强制更新provison profiles | false |
force_for_new_devices |
当有新机器注册时重新生成provison profiles(对于appstore类型的profile无效,因为上传appstore中的文件不包含device) | false |
skip_confirmation |
操作过程中不再提示询问 | false |
skip_docs |
跳过创建 README.md | false |
platform |
平台 | ios |
output_path |
导出 certificates, key and profile路径 | |
verbose |
查看命令行详细输出 | false |
看完了参数,先说一下match的大概流程:
match 是通过远程仓库(git_url)管理你你的证书和描述文件,仓库里的文件会用openSSL进行加密,当你第一次初始化match的时候会需要你输入一个passphrase来设置加密的密码。
如果你是管理者需要你提供苹果账号 和密码来访问苹果账户,以及需要提供你app bundleID生成相关的cert、profiles等等,match会自动匹配对应的profile和cert,有对应则取,无对应则新建。 当你需要某种环境的证书时,match会自动同步到远程仓库以及本地。
当你没有账户密码权限时,只需要设置readonly参数为true以及之前设置的passphrase,就能把证书同步到本地而不需要登录.
match
可以用多参数的形式配置在lane
中。可以直接用一个Matchfile
来配置参数,我们择其后者而从之。
BB is cheap, show me the code
readonly(true) #true表示无编辑权限,同时能防止误操作删除证书,如果是管理员第一次设置match则需要设为false.
type("development") #表示拉取dev环境的相关证书,还可以选择adhoc、enterprise、appstore等。
app_identifier("com.XXX.XXX") #如果是有extension或者多targets 可以设置为app_identifier(["id1","id2"])
username("appleID") #苹果开发者账号
team_id("your teamid") #team id
storage_mode("git") #存储策略是git
git_url("https://gitee.com/XXXX/automateiOS.git")
git_basic_authorization("O45353zkzQHioODc2werqeqEx") #注意这个参数只有在git_url为https的时候才需要设置.一般为 user:password 然后base64加密,注意中间的冒号。当你的仓库地址使用ssh验证的时候则不需要这个参数。
git_user_email("email") #git仓库email
force_for_new_devices(true) #有新设备更新配置证书
verbose(true) #详细看每一步的输出信息
在fastlane文件夹下新建一个Matchfile
(或者直接命令行$ fastlane match init
生成Matchfile文件,建议直接新建,不墨迹), 把上述内容copy到Matchfile
的文件中,保存。如图所示
第一次创建
如果你的git_url
是第一次用于match创建(管理员第一次创建,需要将readonly
设为false
),当你执行$ fastlane match
时,需要你输入苹果账号密码,如下:
输入密码后,如果账号开启了双重认证,会接着要求输入认证手机收到的6位验证码。输入完验证码之后又是一系列的输出,然后会让你输入passphrase,就是对git仓库里文件进行opssl加密的密码,如下图
供他人使用
当换一台新的机器时,cd到工程目录,执行$ fastlane match
(readonly
设为true
),然后输入passphrase(只需要设置一次),就完成了所有的操作。
假如说你dev环境的证书都要过期了,或者没有理由就想删除这个环境的所有证书,执行$ fastlane match nuke development
,那么dev环境下的所有cert、profiles都会瞬间灰飞烟灭,当然前提是你有权限。
register_devices
跟 match
连用能够保证每次打包前有最新的device加入后能立马同步到profile文件中。