如何通过Fastlane/Fastlane Match按条件切换使用多套证书及配置文件
fastlane match 灵活选择多套证书及配置文件实现方案
前置准备
- 先将两套证书、对应的provisioning profiles分别上传到match的存储位置,推荐用同一个git仓库的不同分支做隔离,也可选择不同git仓库、同仓库不同子目录的隔离方案,两套存储互不干扰。
- 提前确认两套配置对应的Apple ID、bundle ID、签名类型(开发/TestFlight/App Store等)参数无误。
Fastfile 核心实现逻辑
你可以在Fastfile中通过自定义条件(如传入参数、环境变量、构建场景标识等)判断需要使用的证书套,给match传入对应配置参数即可,示例如下:
基础实现示例
lane :release_build do |options| # 自定义判断逻辑,这里以传入的cert_type参数为例,可替换为你的业务判断条件 use_cert_set = options[:cert_type] || "set1" if use_cert_set == "set1" # 调用第一套证书配置 match( type: "appstore", app_identifier: "com.yourapp.bundleid", git_url: "git@yourgit.com:cert-repo.git", git_branch: "cert_set1", # 第一套证书对应分支 username: "dev@yourcompany.com", readonly: true # 建议开启,避免误改证书存储 ) elsif use_cert_set == "set2" # 调用第二套证书配置 match( type: "appstore", app_identifier: "com.yourapp.bundleid", git_url: "git@yourgit.com:cert-repo.git", git_branch: "cert_set2", # 第二套证书对应分支 username: "dev@yourcompany.com", readonly: true ) end # 后续构建步骤,这里以gym为例 gym( scheme: "YourAppScheme", configuration: "Release", export_method: "app-store" ) end
简化写法(避免重复代码)
可将通用参数抽离,仅差异化传入不同配置的独有参数:
lane :release_build do |options| # 定义两套证书的差异化配置 cert_config_map = { "set1" => { git_branch: "cert_set1" }, "set2" => { git_branch: "cert_set2" } } # 选中对应配置,默认用第一套 selected_config = cert_config_map[options[:cert_type] || "set1"] # 合并参数调用match match( type: "appstore", app_identifier: "com.yourapp.bundleid", git_url: "git@yourgit.com:cert-repo.git", username: "dev@yourcompany.com", readonly: true, **selected_config # 注入差异化参数 ) gym( scheme: "YourAppScheme", configuration: "Release", export_method: "app-store" ) end
调用方式
- 要使用第一套证书执行构建:
fastlane release_build cert_type:set1 - 要使用第二套证书执行构建:
fastlane release_build cert_type:set2
注意事项
- 两套配置对应的provisioning profile名称不要重复,避免Xcode签名时选错
- 如果需要强绑定对应配置文件,可在gym的
export_options参数中明确指定provisioningProfiles映射关系,进一步规避签名错误 - 初始化两套证书时,分别传入对应分支/路径参数执行match的初始化、证书上传操作即可,互不影响
内容的提问来源于stack exchange,提问作者Terminus
相关产品推荐
相关产品推荐

