pindo 5.13.1 → 5.13.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (115) hide show
  1. checksums.yaml +4 -4
  2. data/lib/pindo/base/git_handler.rb +692 -0
  3. data/lib/pindo/command/android/autobuild.rb +2 -2
  4. data/lib/pindo/command/appstore/adhocbuild.rb +256 -311
  5. data/lib/pindo/command/appstore/autobuild.rb +203 -0
  6. data/lib/pindo/command/appstore/autoresign.rb +35 -17
  7. data/lib/pindo/command/appstore/bundleid.rb +120 -0
  8. data/lib/pindo/command/appstore/cert.rb +212 -0
  9. data/lib/pindo/command/appstore/configproj.rb +81 -0
  10. data/lib/pindo/command/{deploy → appstore}/getitcinfo.rb +76 -91
  11. data/lib/pindo/command/appstore/iap.rb +788 -24
  12. data/lib/pindo/command/appstore/initconfig.rb +105 -0
  13. data/lib/pindo/command/appstore/itcapp.rb +95 -13
  14. data/lib/pindo/command/{deploy → appstore}/itcinfo.rb +90 -118
  15. data/lib/pindo/command/appstore/pem.rb +136 -0
  16. data/lib/pindo/command/appstore/pullconfig.rb +99 -0
  17. data/lib/pindo/command/appstore/quswark.rb +87 -0
  18. data/lib/pindo/command/appstore/quswauth.rb +67 -0
  19. data/lib/pindo/command/appstore/tag.rb +77 -0
  20. data/lib/pindo/command/appstore.rb +13 -1
  21. data/lib/pindo/command/env/quarkenv.rb +11 -13
  22. data/lib/pindo/command/env/swarkenv.rb +11 -16
  23. data/lib/pindo/command/ios/applovin.rb +24 -182
  24. data/lib/pindo/command/ios/autobuild.rb +64 -43
  25. data/lib/pindo/command/ios/autoresign.rb +34 -19
  26. data/lib/pindo/command/ios/build.rb +9 -6
  27. data/lib/pindo/command/ios/cert.rb +27 -20
  28. data/lib/pindo/command/ios/podupdate.rb +6 -37
  29. data/lib/pindo/command/jps/upload.rb +3 -3
  30. data/lib/pindo/command/unity/autobuild.rb +2 -2
  31. data/lib/pindo/command/utils/clearcert.rb +2 -17
  32. data/lib/pindo/command/{deploy → utils}/fabric.rb +13 -13
  33. data/lib/pindo/command/utils/renewcert.rb +62 -38
  34. data/lib/pindo/command/utils/renewproj.rb +0 -3
  35. data/lib/pindo/command/{deploy → utils}/updateconfig.rb +6 -7
  36. data/lib/pindo/command/utils.rb +2 -0
  37. data/lib/pindo/command/web/autobuild.rb +2 -2
  38. data/lib/pindo/command.rb +30 -3
  39. data/lib/pindo/config/build_info_manager.rb +176 -0
  40. data/lib/pindo/config/ios_config_parser.rb +404 -0
  41. data/lib/pindo/module/android/android_config_helper.rb +9 -5
  42. data/lib/pindo/module/appstore/bundleid_helper.rb +349 -0
  43. data/lib/pindo/module/appstore/itcapp_helper.rb +228 -0
  44. data/lib/pindo/module/build/build_helper.rb +12 -0
  45. data/lib/pindo/module/build/swark_helper.rb +116 -77
  46. data/lib/pindo/module/cert/cert_helper.rb +74 -0
  47. data/lib/pindo/module/cert/pem_helper.rb +72 -0
  48. data/lib/pindo/module/cert/{xcodecerthelper.rb → xcode_cert_helper.rb} +211 -6
  49. data/lib/pindo/module/pgyer/pgyerhelper.rb +13 -5
  50. data/lib/pindo/module/task/model/appstore/appstore_task.rb +18 -0
  51. data/lib/pindo/module/task/model/appstore/appstore_upload_ipa_task.rb +151 -0
  52. data/lib/pindo/module/task/model/appstore/appstore_upload_metadata_task.rb +250 -0
  53. data/lib/pindo/module/task/model/appstore/appstore_upload_screenshot_task.rb +276 -0
  54. data/lib/pindo/module/task/model/build/android_build_adhoc_task.rb +210 -0
  55. data/lib/pindo/module/task/model/build/{android_dev_build_task.rb → android_build_dev_task.rb} +2 -2
  56. data/lib/pindo/module/task/model/build/android_build_gplay_task.rb +210 -0
  57. data/lib/pindo/module/task/model/build/android_build_task.rb +13 -0
  58. data/lib/pindo/module/task/model/build/ios_build_adhoc_task.rb +342 -0
  59. data/lib/pindo/module/task/model/build/ios_build_appstore_task.rb +341 -0
  60. data/lib/pindo/module/task/model/build/{ios_dev_build_task.rb → ios_build_dev_task.rb} +40 -59
  61. data/lib/pindo/module/task/model/build/ios_build_task.rb +23 -0
  62. data/lib/pindo/module/task/model/build/{web_dev_build_task.rb → web_build_dev_task.rb} +1 -1
  63. data/lib/pindo/module/task/model/build_task.rb +15 -12
  64. data/lib/pindo/module/task/model/jps_resign_task.rb +185 -0
  65. data/lib/pindo/module/task/model/{upload_task.rb → jps_upload_task.rb} +3 -3
  66. data/lib/pindo/module/task/model/unity_export_task.rb +3 -1
  67. data/lib/pindo/module/unity/unity_helper.rb +2 -1
  68. data/lib/pindo/module/xcode/applovin_xcode_helper.rb +271 -0
  69. data/lib/pindo/module/xcode/cocoapods_helper.rb +153 -0
  70. data/lib/pindo/module/xcode/ipa_resign_helper.rb +210 -0
  71. data/lib/pindo/module/xcode/{xcodeappconfig.rb → xcode_app_config.rb} +79 -0
  72. data/lib/pindo/module/xcode/xcode_build_config.rb +152 -17
  73. data/lib/pindo/module/xcode/xcode_build_helper.rb +151 -1
  74. data/lib/pindo/module/xcode/xcode_swark_helper.rb +341 -0
  75. data/lib/pindo/options/core/global_options_state.rb +268 -0
  76. data/lib/pindo/options/core/option_configuration.rb +206 -0
  77. data/lib/pindo/options/core/option_initializer.rb +51 -0
  78. data/lib/pindo/options/core/option_item.rb +144 -0
  79. data/lib/pindo/options/core/option_value_parser.rb +54 -0
  80. data/lib/pindo/options/groups/build_options.rb +60 -0
  81. data/lib/pindo/options/groups/jps_options.rb +70 -0
  82. data/lib/pindo/options/groups/option_group.rb +73 -0
  83. data/lib/pindo/options/helpers/bundleid_selector.rb +103 -0
  84. data/lib/pindo/options/options.rb +14 -0
  85. data/lib/pindo/version.rb +1 -1
  86. metadata +51 -40
  87. data/lib/pindo/command/appstore/import.rb +0 -259
  88. data/lib/pindo/command/deploy/build.rb +0 -250
  89. data/lib/pindo/command/deploy/bundleid.rb +0 -259
  90. data/lib/pindo/command/deploy/cert.rb +0 -202
  91. data/lib/pindo/command/deploy/check.rb +0 -93
  92. data/lib/pindo/command/deploy/configproj.rb +0 -120
  93. data/lib/pindo/command/deploy/confusecode.rb +0 -262
  94. data/lib/pindo/command/deploy/confuseproj.rb +0 -122
  95. data/lib/pindo/command/deploy/iap.rb +0 -826
  96. data/lib/pindo/command/deploy/initconfig.rb +0 -138
  97. data/lib/pindo/command/deploy/itcapp.rb +0 -146
  98. data/lib/pindo/command/deploy/pem.rb +0 -55
  99. data/lib/pindo/command/deploy/pullconfig.rb +0 -56
  100. data/lib/pindo/command/deploy/pushconfig.rb +0 -93
  101. data/lib/pindo/command/deploy/quswark.rb +0 -156
  102. data/lib/pindo/command/deploy/quswauth.rb +0 -76
  103. data/lib/pindo/command/deploy/reportbug.rb +0 -145
  104. data/lib/pindo/command/deploy/resign.rb +0 -300
  105. data/lib/pindo/command/deploy/tag.rb +0 -108
  106. data/lib/pindo/command/deploy/uploadipa.rb +0 -73
  107. data/lib/pindo/command/deploy.rb +0 -42
  108. data/lib/pindo/command/dev/autobuild.rb +0 -117
  109. data/lib/pindo/command/dev/build.rb +0 -94
  110. data/lib/pindo/command/dev/debug.rb +0 -112
  111. data/lib/pindo/module/task/model/build/android_release_build_task.rb +0 -29
  112. data/lib/pindo/module/task/model/build/ios_adhoc_build_task.rb +0 -53
  113. data/lib/pindo/module/task/model/build/ios_release_build_task.rb +0 -53
  114. data/lib/pindo/options/appconfigoptions.rb +0 -24
  115. data/lib/pindo/options/deployoptions.rb +0 -372
@@ -1,16 +1,17 @@
1
- require_relative '../build_task'
1
+ require_relative 'ios_build_task'
2
2
  require 'pindo/module/build/build_helper'
3
3
  require 'pindo/module/build/version_helper'
4
4
  require 'pindo/module/build/git_repo_helper'
5
5
  require 'pindo/module/xcode/xcode_build_config'
6
6
  require 'pindo/module/xcode/xcode_build_helper'
7
+ require 'pindo/module/xcode/cocoapods_helper'
7
8
  require 'pindo/module/pgyer/pgyerhelper'
8
9
 
9
10
  module Pindo
10
11
  module TaskSystem
11
12
  # iOS Dev 模式构建任务
12
13
  # 使用 Development 证书编译 iOS 工程
13
- class IosDevBuildTask < BuildTask
14
+ class IosBuildDevTask < IosBuildTask
14
15
  def initialize(options = {})
15
16
  @bundle_id = options[:bundle_id]
16
17
  @proj_name = options[:proj_name]
@@ -45,12 +46,13 @@ module Pindo
45
46
  update_version_info
46
47
  pull_config
47
48
  update_entitlements
48
- handle_cocoapods
49
+
49
50
  end
50
51
 
51
52
  def execute_build
52
53
  configure_certificate
53
54
  update_url_schemes_final
55
+ handle_cocoapods
54
56
  build_ios_project
55
57
  end
56
58
 
@@ -92,14 +94,6 @@ module Pindo
92
94
  end
93
95
  end
94
96
 
95
- # 清理 Firebase Shell Script
96
- def cleanup_firebase_shell
97
- project_fullname = Dir.glob(File.join(@project_path, "/*.xcodeproj")).max_by { |f| File.mtime(f) }
98
- if !project_fullname.nil? && File.exist?(project_fullname)
99
- Pindo::XcodeBuildHelper.delete_libtarget_firebase_shell(@project_path)
100
- end
101
- end
102
-
103
97
  # 更新工程配置
104
98
  def update_project_config
105
99
  workflow_packname = @workflow_info[:package_name]
@@ -146,19 +140,21 @@ module Pindo
146
140
  end
147
141
  end
148
142
 
149
- # 拉取配置
143
+ # 检查配置
150
144
  def pull_config
151
- args_temp = []
152
- args_temp << @bundle_id if @bundle_id
153
- Pindo::Command::Deploy::Pullconfig::run(args_temp)
145
+ # 检查 IosConfigParser 单例中是否已加载配置
146
+ config_parser = Pindo::IosConfigParser.instance
147
+ if config_parser.config_json.nil?
148
+ raise Informative, "IosBuildDevTask 配置未加载,请确保在命令层已正确加载 config.json"
149
+ end
150
+
151
+ puts " 使用已加载的配置..."
154
152
  end
155
153
 
156
154
  # 更新 Entitlements
157
155
  def update_entitlements
158
- config_json_file = File.join(@project_path, "config.json")
159
156
  Pindo::XcodeBuildConfig.update_entitlements_config(
160
- project_dir: @project_path,
161
- config_file: config_json_file
157
+ project_dir: @project_path
162
158
  )
163
159
  end
164
160
 
@@ -166,29 +162,14 @@ module Pindo
166
162
  def handle_cocoapods
167
163
  return unless File.exist?(File.join(@project_path, "Podfile"))
168
164
 
169
- Dir.chdir(@project_path)
170
- Pindo::Command::Ios::Podupdate::run([])
171
-
172
- begin
173
- # 清理现有 Pods
174
- FileUtils.rm_rf(File.join(@project_path, "Podfile.lock")) if File.exist?(File.join(@project_path, "Podfile.lock"))
175
- FileUtils.rm_rf(File.join(@project_path, "Pods")) if File.exist?(File.join(@project_path, "Pods"))
176
-
177
- puts "正在执行 pod deintegrate..."
178
- system 'pod deintegrate'
179
-
180
- puts "正在执行 pod install..."
181
- system 'pod install'
182
- rescue => error
183
- puts(error.to_s)
184
- raise Informative, "pod install 失败!!先 pod install 完成后再编译!"
185
- end
165
+ # 1. 更新私有索引库
166
+ Pindo::CocoaPodsHelper.update_pod_repo(
167
+ install: false,
168
+ project_dir: @project_path
169
+ )
186
170
 
187
- # 检查 pod install 是否成功
188
- pod_lock_file = File.join(@project_path, "Podfile.lock")
189
- unless File.exist?(pod_lock_file)
190
- raise Informative, "pod install 失败!!先 pod install 完成后再编译!"
191
- end
171
+ # 2. 清理并重新安装
172
+ Pindo::CocoaPodsHelper.deintegrate_and_install(@project_path)
192
173
  end
193
174
 
194
175
  # 配置证书
@@ -196,22 +177,14 @@ module Pindo
196
177
  # 检查是否是 macOS 工程
197
178
  detect_macos_platform
198
179
 
199
- args_temp = ['--dev']
200
- args_temp << '--macos' if @macos_flag
201
-
202
- # 如果有 Unity 根目录路径,需要从那里读取 config.json
203
- if @unity_root_path
204
- # 临时切换到 Unity 根目录读取 config.json
205
- config_path = File.join(@unity_root_path, 'config.json')
206
- if File.exist?(config_path)
207
- args_temp << config_path
208
- end
209
- end
210
-
211
- # 切换到 iOS 工程目录,确保 Cert::run 能找到 xcodeproj
212
- Dir.chdir(@project_path) do
213
- Pindo::Command::Deploy::Cert::run(args_temp)
214
- end
180
+ # 使用新的证书安装方法
181
+ # config.json 已经通过 pull_config 方法拉取到 @project_path 目录
182
+ require 'pindo/module/cert/xcode_cert_helper'
183
+ Pindo::XcodeCertHelper.install_and_config_certs(
184
+ build_type: 'dev',
185
+ platform_type: @macos_flag ? 'macos' : 'ios',
186
+ project_dir: @project_path
187
+ )
215
188
  end
216
189
 
217
190
  # 检测是否为 macOS 平台
@@ -241,10 +214,18 @@ module Pindo
241
214
  def build_ios_project
242
215
  Dir.chdir(@project_path)
243
216
 
244
- args_temp = ['--dev']
245
- args_temp << '--macos' if @macos_flag
217
+ # 使用 XcodeBuildHelper 进行构建
218
+ ipa_file = Pindo::XcodeBuildHelper.build_project(
219
+ project_dir: @project_path,
220
+ icloud_id: nil
221
+ )
222
+
223
+ if ipa_file.nil?
224
+ raise Informative, "构建失败:未生成 IPA 文件"
225
+ end
246
226
 
247
- Pindo::Command::Deploy::Build::run(args_temp)
227
+ puts "构建成功:#{ipa_file}"
228
+ ipa_file
248
229
  end
249
230
  end
250
231
  end
@@ -0,0 +1,23 @@
1
+ require_relative '../build_task'
2
+ require 'pindo/module/xcode/xcode_build_helper'
3
+
4
+ module Pindo
5
+ module TaskSystem
6
+ # iOS 构建任务基类
7
+ # 所有 iOS 平台构建任务的抽象基类
8
+ # 子类包括:IosBuildDevTask、IosBuildAdhocTask、IosBuildAppStoreTask
9
+ class IosBuildTask < BuildTask
10
+
11
+ protected
12
+
13
+ # 清理 Firebase Shell Script
14
+ # 删除 Xcode 项目中的 Firebase Shell Script Build Phase
15
+ def cleanup_firebase_shell
16
+ project_fullname = Dir.glob(File.join(@project_path, "/*.xcodeproj")).max_by { |f| File.mtime(f) }
17
+ if !project_fullname.nil? && File.exist?(project_fullname)
18
+ Pindo::XcodeBuildHelper.delete_libtarget_firebase_shell(@project_path)
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -5,7 +5,7 @@ module Pindo
5
5
  # Web 构建任务
6
6
  # Web 平台不需要编译,Unity 导出后即为最终产物
7
7
  # 此任务只检查构建产物是否存在
8
- class WebDevBuildTask < BuildTask
8
+ class WebBuildDevTask < BuildTask
9
9
  def initialize(options = {})
10
10
  super(:web, :dev, options)
11
11
  end
@@ -81,17 +81,17 @@ module Pindo
81
81
 
82
82
  # 创建 iOS 构建任务
83
83
  def self.create_ios_task(mode, options)
84
- require_relative 'build/ios_dev_build_task'
85
- require_relative 'build/ios_adhoc_build_task'
86
- require_relative 'build/ios_release_build_task'
84
+ require_relative 'build/ios_build_dev_task'
85
+ require_relative 'build/ios_build_adhoc_task'
86
+ require_relative 'build/ios_build_appstore_task'
87
87
 
88
88
  case mode
89
89
  when :dev
90
- IosDevBuildTask.new(options)
90
+ IosBuildDevTask.new(options)
91
91
  when :adhoc
92
- IosAdhocBuildTask.new(options)
92
+ IosBuildAdhocTask.new(options)
93
93
  when :release
94
- IosReleaseBuildTask.new(options)
94
+ IosBuildAppStoreTask.new(options)
95
95
  else
96
96
  raise ArgumentError, "不支持的 iOS 构建模式: #{mode}"
97
97
  end
@@ -99,14 +99,17 @@ module Pindo
99
99
 
100
100
  # 创建 Android 构建任务
101
101
  def self.create_android_task(mode, options)
102
- require_relative 'build/android_dev_build_task'
103
- require_relative 'build/android_release_build_task'
102
+ require_relative 'build/android_build_dev_task'
103
+ require_relative 'build/android_build_adhoc_task'
104
+ require_relative 'build/android_build_gplay_task'
104
105
 
105
106
  case mode
106
107
  when :dev, :debug
107
- AndroidDevBuildTask.new(options)
108
+ AndroidBuildDevTask.new(options)
109
+ when :adhoc
110
+ AndroidBuildAdhocTask.new(options)
108
111
  when :release
109
- AndroidReleaseBuildTask.new(options)
112
+ AndroidBuildGPlayTask.new(options)
110
113
  else
111
114
  raise ArgumentError, "不支持的 Android 构建模式: #{mode}"
112
115
  end
@@ -114,12 +117,12 @@ module Pindo
114
117
 
115
118
  # 创建 Web 构建任务
116
119
  def self.create_web_task(mode, options)
117
- require_relative 'build/web_dev_build_task'
120
+ require_relative 'build/web_build_dev_task'
118
121
 
119
122
  case mode
120
123
  when :dev, :debug, :release
121
124
  # Web 目前只有一个构建任务类
122
- WebDevBuildTask.new(options)
125
+ WebBuildDevTask.new(options)
123
126
  else
124
127
  raise ArgumentError, "不支持的 Web 构建模式: #{mode}"
125
128
  end
@@ -0,0 +1,185 @@
1
+ require_relative '../pindo_task'
2
+ require_relative '../task_config'
3
+ require 'pindo/module/pgyer/pgyerhelper'
4
+
5
+ module Pindo
6
+ module TaskSystem
7
+ # JPS 重签名任务
8
+ # 从 JPS 平台下载应用并使用指定证书重签名
9
+ class JPSResignTask < PindoTask
10
+ attr_reader :app_info_obj, :version_info, :cert_id, :send_flag
11
+
12
+ def self.task_type
13
+ :jps_resign
14
+ end
15
+
16
+ # 重试配置
17
+ def self.default_retry_mode
18
+ RetryMode::DELAYED # 延迟重试
19
+ end
20
+
21
+ def self.default_retry_count
22
+ 2 # 默认可以重试 2 次
23
+ end
24
+
25
+ def self.default_retry_delay
26
+ 10 # 默认延迟 10 秒
27
+ end
28
+
29
+ # 初始化 JPS 重签名任务
30
+ # @param options [Hash] 选项
31
+ # @option options [Hash] :app_info_obj JPS 应用信息对象(可选,如为 nil 则延迟获取)
32
+ # @option options [String] :project_name 项目名称(可选)
33
+ # @option options [String] :cert_id 重签名使用的 Bundle ID(可选,nil 表示交互选择)
34
+ # @option options [Boolean] :send_flag 是否发送到测试群(默认 false,始终会发送给自己)
35
+ def initialize(options = {})
36
+ @app_info_obj = options[:app_info_obj]
37
+ @project_name = options[:project_name]
38
+ @cert_id = options[:cert_id]
39
+ @send_flag = options[:send_flag] || false
40
+ @version_info = nil
41
+
42
+ # 设置重签名任务的优先级为 LOW,确保在上传任务之后执行
43
+ options[:priority] ||= TaskPriority::LOW
44
+
45
+ super("JPS 重签名", options)
46
+ end
47
+
48
+ def validate
49
+ # app_info_obj 可以延迟获取,不在这里验证
50
+ true
51
+ end
52
+
53
+ protected
54
+
55
+ def do_work
56
+ pgyer_helper = PgyerHelper.share_instace
57
+
58
+ # 1. 如果没有 app_info_obj,延迟获取
59
+ if @app_info_obj.nil?
60
+ fetch_jps_config
61
+ end
62
+
63
+ # 2. 获取要重签名的版本
64
+ @version_info = pgyer_helper.get_versioon_history_item(
65
+ app_info_obj: @app_info_obj,
66
+ list_select_flat: false
67
+ )
68
+
69
+ if @version_info.nil?
70
+ @retry_count = 0 # 没有版本记录时不重试
71
+ raise "没有找到上传记录"
72
+ end
73
+
74
+ # 3. 获取证书列表
75
+ cert_list = pgyer_helper.get_cert_list
76
+
77
+ if cert_list.nil? || cert_list.empty?
78
+ @retry_count = 0 # 没有证书时不重试
79
+ raise "没有找到可用的证书"
80
+ end
81
+
82
+ # 4. 选择证书
83
+ cert_item = select_certificate(cert_list)
84
+
85
+ if cert_item.nil?
86
+ @retry_count = 0 # 没有匹配的证书时不重试
87
+ raise "未找到匹配的证书"
88
+ end
89
+
90
+ # 5. 执行重签名
91
+ result = pgyer_helper.resign(
92
+ package_id: @version_info["id"],
93
+ cert_id: cert_item["id"]
94
+ )
95
+
96
+ unless result
97
+ raise "重签名失败"
98
+ end
99
+
100
+ # 6. 获取重签名后的版本信息
101
+ @version_info = pgyer_helper.get_versioon_history_item(
102
+ app_info_obj: @app_info_obj,
103
+ list_select_flat: false
104
+ )
105
+
106
+ if @version_info.nil?
107
+ raise "重签名成功但无法获取新版本信息"
108
+ end
109
+
110
+ # 7. 打印版本信息
111
+ pgyer_helper.print_app_version_info(
112
+ app_info_obj: @app_info_obj,
113
+ app_version_info_obj: @version_info
114
+ )
115
+
116
+ # 8. 发送消息给自己
117
+ pgyer_helper.send_apptest_msg(
118
+ app_info_obj: @app_info_obj,
119
+ app_version_info_obj: @version_info,
120
+ receiveType: "self"
121
+ )
122
+
123
+ # 9. 如果需要发送到测试群
124
+ if @send_flag
125
+ pgyer_helper.send_apptest_msg(
126
+ app_info_obj: @app_info_obj,
127
+ app_version_info_obj: @version_info,
128
+ chatEnv: "DevTest",
129
+ receiveType: "chat"
130
+ )
131
+ end
132
+
133
+ {
134
+ success: true,
135
+ version_info: @version_info,
136
+ cert_id: cert_item["mainBundleId"]
137
+ }
138
+ end
139
+
140
+ private
141
+
142
+ # 延迟获取 JPS 配置
143
+ def fetch_jps_config
144
+ puts " 获取 JPS 配置..."
145
+
146
+ # 获取当前工作目录
147
+ working_directory = Dir.pwd
148
+
149
+ # 调用 PgyerHelper 获取配置
150
+ @app_info_obj = PgyerHelper.share_instace.prepare_upload(
151
+ working_directory: working_directory,
152
+ proj_name: @project_name
153
+ )
154
+
155
+ unless @app_info_obj
156
+ raise "无法获取 JPS 配置"
157
+ end
158
+ end
159
+
160
+ # 选择证书
161
+ def select_certificate(cert_list)
162
+ if @cert_id.nil? && cert_list.size > 0
163
+ # 交互式选择证书
164
+ bundle_id_list = cert_list.map { |cert| [cert["certType"], cert["mainBundleId"]].join("_") }
165
+ cli = HighLine.new
166
+ selected = cli.choose do |menu|
167
+ menu.prompt = "请选择重签名的证书:"
168
+ menu.choices(*bundle_id_list)
169
+ end
170
+
171
+ # 根据选择找到对应的证书
172
+ cert_list.select { |certitem|
173
+ [certitem["certType"], certitem["mainBundleId"]].join("_") == selected
174
+ }.first
175
+ else
176
+ # 根据 cert_id 查找 adhoc 证书
177
+ cert_list.select { |certitem|
178
+ certitem["mainBundleId"] == @cert_id &&
179
+ certitem["certType"].downcase.include?("adhoc")
180
+ }.first
181
+ end
182
+ end
183
+ end
184
+ end
185
+ end
@@ -4,9 +4,9 @@ require 'pindo/module/pgyer/pgyerhelper'
4
4
 
5
5
  module Pindo
6
6
  module TaskSystem
7
- # 上传任务
8
- # 上传构建产物到测试平台(JPS
9
- class UploadTask < PindoTask
7
+ # JPS 上传任务
8
+ # 上传构建产物到 JPS 测试平台
9
+ class JPSUploadTask < PindoTask
10
10
  attr_reader :file_type, :upload_path, :upload_file
11
11
 
12
12
  def self.task_type
@@ -31,6 +31,7 @@ module Pindo
31
31
  @is_library_mode = false # 不再支持库模式
32
32
  @index_count = options[:context] ? options[:context][:index_count] : nil
33
33
  @export_path = options[:export_path] # 可由参数传入,nil 表示自动检测
34
+ @deploy_mode = options[:deploy_mode] || 'dev' # 部署模式:dev/adhoc/release,默认 dev
34
35
 
35
36
  name = case platform
36
37
  when 'ios', 'ipa'
@@ -188,7 +189,8 @@ module Pindo
188
189
  project_path: @unity_project_path,
189
190
  platform: platform,
190
191
  isLibrary: @is_library_mode,
191
- indexNo: @index_count
192
+ indexNo: @index_count,
193
+ deployMode: @deploy_mode
192
194
  )
193
195
 
194
196
  # 清理 Unity 进程
@@ -422,7 +422,7 @@ module Pindo
422
422
  nil
423
423
  end
424
424
 
425
- def build_project(unity_exe_full_path:nil, project_path:nil, platform: nil, isLibrary: false, indexNo: nil)
425
+ def build_project(unity_exe_full_path:nil, project_path:nil, platform: nil, isLibrary: false, indexNo: nil, deployMode: nil)
426
426
 
427
427
  # 检查是否有Unity进程在运行,传入Unity路径和项目路径以精确匹配
428
428
  check_unity_processes(unity_exe_full_path: unity_exe_full_path, project_path: project_path)
@@ -434,6 +434,7 @@ module Pindo
434
434
  additional_args[:platform] = platform if platform
435
435
  additional_args[:buildtype] = 'library' if isLibrary
436
436
  additional_args[:indexno] = indexNo if indexNo
437
+ additional_args[:deploymode] = deployMode || 'dev' if deployMode || true # 默认为 dev
437
438
 
438
439
  # 使用GoodUnityBuild.BuildManager.BatchBuild进行构建
439
440
  result = execute_unity_command(unity_exe_full_path, project_path, additional_args)