如何设置fastlane match默认选择Apple Distribution类型证书?
问题1:为什么fastlane会默认选择iOS distribution证书?
苹果在Xcode 11版本之后才推出跨平台统一的Apple Distribution证书,替代之前拆分的iOS Distribution、Mac Distribution等独立分发证书。你当前使用的fastlane版本属于兼容旧版Xcode的旧版本,内置的默认签名证书搜索规则仍沿用旧的证书类型优先级,所以会优先查找iOS Distribution类型证书。另外如果你的Xcode Runner工程的签名配置未手动指定新的统一证书类型,fastlane读取工程默认遗留配置时也会触发该逻辑。
问题2:能否设置fastlane默认选择Apple Distribution证书?
可以,有两种实现方式:
- 升级fastlane到2.205.0及以上版本,该版本之后fastlane已将默认分发证书类型调整为
Apple Distribution,无需额外配置即可自动匹配 - 若不升级版本,只需修改当前lane中的配置即可:
- 在
match动作的参数中新增certificate_type: "Apple Distribution",明确指定要拉取的证书类型 - 若修改后仍有报错,可在
build_app动作中补充codesign_identity: "Apple Distribution"参数,强制指定签名使用的证书类型
- 在
修改后的match配置示例:
match( app_identifier: ENV["APP_IDENTIFIER"], git_url: ENV["GIT_URL"], type: "adhoc", readonly: is_ci, keychain_name: ENV['MATCH_KEYCHAIN_NAME'], keychain_password: ENV["MATCH_KEYCHAIN_PASSWORD"], certificate_type: "Apple Distribution" # 新增该行配置 )
如果你的match证书仓库中存储的还是旧版iOS Distribution证书,需要先清空仓库内的旧证书,重新执行一次match adhoc生成并存储新的Apple Distribution类型证书即可。
问题3:fastlane的证书选择逻辑是什么?
fastlane搜索签名证书的优先级从高到低依次为:
- 第一优先级:用户在
match、build_app等动作中手动传入的证书类型、证书ID、codesign_identity等明确指定参数 - 第二优先级:读取当前Xcode工程/Workspace的签名配置,包括对应Target的签名设置、导出用的exportOptions.plist中的配置项
- 第三优先级:使用fastlane对应动作的内置默认值,旧版fastlane默认值为
iOS Distribution,2.205.0及以上版本已将默认值调整为Apple Distribution - 最后在匹配类型的前提下,优先选择本地钥匙串中对应团队ID下、带私钥、有效期最长的有效证书
内容的提问来源于stack exchange,提问作者Dolphin
相关产品推荐
相关产品推荐

