fastlane 自动化02----证书签名

传送门:

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_profilematch&sync_code_signingcert&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加密的密码,如下图
输入两次后,就完成了match创建的过程。

供他人使用

当换一台新的机器时,cd到工程目录,执行$ fastlane match (readonly 设为true),然后输入passphrase(只需要设置一次),就完成了所有的操作。

假如说你dev环境的证书都要过期了,或者没有理由就想删除这个环境的所有证书,执行$ fastlane match nuke development,那么dev环境下的所有cert、profiles都会瞬间灰飞烟灭,当然前提是你有权限。

register_devicesmatch 连用能够保证每次打包前有最新的device加入后能立马同步到profile文件中。

你可能感兴趣的:(fastlane 自动化02----证书签名)