Fastlane是一种强大的自动化构建工具,它可以帮助我们自动化iOS构建和发布过程。其中,Fastlane的Match工具可以用来管理证书和配置文件。在团队协作开发中,我们可以使用Match来共享证书和配置文件,这样每个开发者都可以使用相同的证书和配置文件进行构建和发布,从而避免了许多证书和配置文件管理上的问题。
我们可能需要将解密后的证书和配置文件导出,例如,我们可能需要在Jenkins上设置自动化构建任务。在这种情况下,可以使用下面的bash脚本来解密并导出证书和配置文件。
具体加解密可查看官方说明文档docs.fastlane.tools/actions/mat… 中的Manual Decrypt
章节
这个脚本定义了三个函数:export_dis_P12
,export_dev_P12
和exportProfile
。这些函数使用openssl工具来解密证书和配置文件,并将它们转换成p12格式。然后,这些函数将这些解密后的证书和配置文件导出到当前目录下。
此脚本中的几个关键变量如下:
PASSWORD
:用于解密证书和配置文件的密码。DEV_P12_FILENAME
和DIS_P12_FILENAME
:需要解密的证书的文件名不包含文件后缀。BUNDLE_ID
:应用的Bundle ID。
在执行完这些函数后,脚本将解密后的证书和配置文件打包成一个zip文件,并输出一个消息,告诉用户如何下载这个zip文件。
这个脚本是在Jenkins任务中执行的,因此,所有的文件路径都是相对于Jenkins的工作目录的。如果你在其他环境中运行这个脚本,你可能需要修改这些文件路径。
工作目录可能比较乱,建议jenkins中直接设置每次执行时自动清理工作空间
#!/bin/bash -l
export_dis_P12() {
local password=$1
local p12_filename=$2
# decrypt private key
openssl aes-256-cbc -k "$password" -in "certs/distribution/$p12_filename.p12" -out dis_key.pem -a -d
# decrypt cert
openssl aes-256-cbc -k "$password" -in "certs/distribution/$p12_filename.cer" -out dis_cert.der -a -d
# convert cert from der to pem
openssl x509 -inform der -in dis_cert.der -out dis_cert.pem
# combine private key + cert into p12 (enter password to secure output p12 file)
openssl pkcs12 -export -out dis_cert.p12 -inkey dis_key.pem -in dis_cert.pem -password pass:"$password"
}
export_dev_P12() {
local password=$1
local p12_filename=$2
# decrypt private key
openssl aes-256-cbc -k "$password" -in "certs/development/$p12_filename.p12" -out dev_key.pem -a -d
# decrypt cert
openssl aes-256-cbc -k "$password" -in "certs/development/$p12_filename.cer" -out dev_cert.der -a -d
# convert cert from der to pem
openssl x509 -inform der -in dev_cert.der -out dev_cert.pem
# combine private key + cert into p12 (enter password to secure output p12 file)
openssl pkcs12 -export -out dev_cert.p12 -inkey dev_key.pem -in dev_cert.pem -password pass:"$password"
}
exportProfile() {
local password=$1
local bundle_id=$2
# decrypt AdHoc profile
openssl aes-256-cbc -k "$password" -in "profiles/adhoc/AdHoc_$bundle_id.mobileprovision" -out "AdHoc_$bundle_id.mobileprovision" -a -d
# decrypt Development profile
openssl aes-256-cbc -k "$password" -in "profiles/development/Development_$bundle_id.mobileprovision" -out "Development_$bundle_id.mobileprovision" -a -d
# decrypt AppStore profile
openssl aes-256-cbc -k "$password" -in "profiles/appstore/AppStore_$bundle_id.mobileprovision" -out "AppStore_$bundle_id.mobileprovision" -a -d
}
PASSWORD="xxxxxx"
DEV_P12_FILENAME="xxxxxx"
DIS_P12_FILENAME="xxxxxx"
BUNDLE_ID="com.xxxxxx.xxxxxx"
export_dev_P12 "$PASSWORD" "$DEV_P12_FILENAME"
export_dis_P12 "$PASSWORD" "$DIS_P12_FILENAME"
exportProfile "$PASSWORD" "$BUNDLE_ID"
zip all_export.zip "AdHoc_${BUNDLE_ID}.mobileprovision" "Development_${BUNDLE_ID}.mobileprovision" "AppStore_${BUNDLE_ID}.mobileprovision" dev_cert.p12 dis_cert.p12
echo "请至工作区下载all_export.zip, 或者访问 http://yourJenkinsIp:8080/job/$JOB_NAME/ws/all_export.zip"
执行结果: