Class: Pindo::CertProcess::MatchGitCertOperator

Inherits:
BaseCertOperator show all
Defined in:
lib/pindo/module/cert/mode/match_git_cert_operator.rb

Overview

✅ 场景 1、2:Match + Git 证书操作

使用 fastlane match 管理证书,存储在 Git 仓库

创建模式:

  • 调用 Apple Developer API 创建证书

  • AES 加密证书文件

  • 推送到 Match Git 仓库

  • 安装到本地 Keychain

获取模式:

  • 从 Match Git 仓库拉取加密证书

  • AES 解密

  • 安装到本地 Keychain

Instance Method Summary collapse

Instance Method Details

#create_and_install_certs(apple_id:, bundle_id_array:, cert_type:, platform_type:, project_dir: nil) ⇒ Array<Hash>

✅ 场景 1:创建 + Match + Git

使用 fastlane match 创建证书并推送到 Git 仓库

Parameters:

  • apple_id (String)

    Apple ID

  • bundle_id_array (Array<String>)

    Bundle ID 数组

  • cert_type (String)

    证书类型

  • platform_type (String)

    平台类型

  • project_dir (String, nil) (defaults to: nil)

    项目目录(可选,Match 模式通常不配置工程)

Returns:

  • (Array<Hash>)

    provisioning_info_array



36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# File 'lib/pindo/module/cert/mode/match_git_cert_operator.rb', line 36

def create_and_install_certs(apple_id:, bundle_id_array:, cert_type:, platform_type:, project_dir: nil)
  Funlog.instance.fancyinfo_start("使用 fastlane match 创建并安装证书...")

  # 获取 match 配置参数(内部方法)
  values = build_match_config_values(
    apple_id: apple_id,
    bundle_id_array: bundle_id_array,
    cert_type: cert_type,
    platform_type: platform_type,
    renew_flag: true  # 创建模式:force=true, readonly=false
  )

  config = FastlaneCore::Configuration.create(Match::Options.available_options, values)

  # 注意:fastlane match 可能会产生 '--template_name' 弃用警告
  # 这是 fastlane 内部使用的参数,在 App Store Connect API v3.8.0 中已弃用
  # 该警告不影响功能,fastlane 会自动处理兼容性
  # 参考:https://docs.fastlane.tools/actions/match/#managed-capabilities
  Match::Runner.new.run(config)

  # 从环境变量中读取 match 创建的证书信息(内部方法)
  provisioning_info_array = extract_provisioning_info_from_match_env(
    cert_type: cert_type,
    platform_type: platform_type
  )

  # 保存证书信息到全局配置
  pindo_single_config = Pindoconfig.instance
  pindo_single_config.set_cert_info(dict: provisioning_info_array)

  # 验证证书信息
  if provisioning_info_array.nil? || provisioning_info_array.empty?
    raise Informative, "未找到证书信息"
  end

  Funlog.instance.fancyinfo_success("fastlane match 创建证书完成!")
  provisioning_info_array
end

#fetch_and_install_certs(apple_id:, bundle_id_array:, cert_type:, platform_type:, project_dir: nil) ⇒ Array<Hash>

✅ 场景 2:获取 + Match + Git

使用 fastlane match 从 Git 仓库获取证书(只读模式)

Parameters:

  • apple_id (String)

    Apple ID

  • bundle_id_array (Array<String>)

    Bundle ID 数组

  • cert_type (String)

    证书类型

  • platform_type (String)

    平台类型

  • project_dir (String, nil) (defaults to: nil)

    项目目录(可选,Match 模式通常不配置工程)

Returns:

  • (Array<Hash>)

    provisioning_info_array



85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
# File 'lib/pindo/module/cert/mode/match_git_cert_operator.rb', line 85

def fetch_and_install_certs(apple_id:, bundle_id_array:, cert_type:, platform_type:, project_dir: nil)
  Funlog.instance.fancyinfo_start("使用 fastlane match 获取并安装证书...")

  # 获取 match 配置参数(内部方法)
  values = build_match_config_values(
    apple_id: apple_id,
    bundle_id_array: bundle_id_array,
    cert_type: cert_type,
    platform_type: platform_type,
    renew_flag: false  # 只读模式:force=false, readonly=true
  )

  config = FastlaneCore::Configuration.create(Match::Options.available_options, values)

  # 从 Git 获取证书(只读模式)
  Match::Runner.new.run(config)

  # 从环境变量中读取 match 获取的证书信息(内部方法)
  provisioning_info_array = extract_provisioning_info_from_match_env(
    cert_type: cert_type,
    platform_type: platform_type
  )

  # 保存证书信息到全局配置
  pindo_single_config = Pindoconfig.instance
  pindo_single_config.set_cert_info(dict: provisioning_info_array)

  # 验证证书信息
  if provisioning_info_array.nil? || provisioning_info_array.empty?
    raise Informative, "未找到证书信息"
  end

  Funlog.instance.fancyinfo_success("fastlane match 获取证书完成!")
  provisioning_info_array
end