pindo 5.13.9 → 5.13.10

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 (70) hide show
  1. checksums.yaml +4 -4
  2. data/lib/pindo/base/git_handler.rb +247 -42
  3. data/lib/pindo/command/android/autobuild.rb +72 -30
  4. data/lib/pindo/command/android/autoresign.rb +23 -322
  5. data/lib/pindo/command/android/keystore.rb +7 -130
  6. data/lib/pindo/command/appstore/adhocbuild.rb +5 -14
  7. data/lib/pindo/command/appstore/autobuild.rb +64 -14
  8. data/lib/pindo/command/appstore/autoresign.rb +1 -3
  9. data/lib/pindo/command/ios/autobuild.rb +71 -53
  10. data/lib/pindo/command/ios/build.rb +8 -186
  11. data/lib/pindo/command/jps/media.rb +146 -0
  12. data/lib/pindo/command/jps/upload.rb +48 -20
  13. data/lib/pindo/command/jps.rb +1 -0
  14. data/lib/pindo/command/unity/autobuild.rb +99 -27
  15. data/lib/pindo/command/unity/packpush.rb +5 -8
  16. data/lib/pindo/command/utils/repoinit.rb +0 -2
  17. data/lib/pindo/command/utils/tag.rb +58 -26
  18. data/lib/pindo/command/utils.rb +0 -1
  19. data/lib/pindo/command/web/autobuild.rb +71 -37
  20. data/lib/pindo/command.rb +0 -56
  21. data/lib/pindo/config/build_info_manager.rb +7 -8
  22. data/lib/pindo/module/android/android_config_helper.rb +2 -11
  23. data/lib/pindo/module/appselect.rb +15 -41
  24. data/lib/pindo/module/appstore/itcapp_helper.rb +3 -6
  25. data/lib/pindo/module/build/build_helper.rb +28 -18
  26. data/lib/pindo/module/build/git_repo_helper.rb +284 -405
  27. data/lib/pindo/module/cert/pem_helper.rb +3 -6
  28. data/lib/pindo/module/pgyer/pgyerhelper.rb +193 -25
  29. data/lib/pindo/module/task/model/appstore/appstore_task.rb +5 -0
  30. data/lib/pindo/module/task/model/build/android_build_adhoc_task.rb +13 -187
  31. data/lib/pindo/module/task/model/build/android_build_dev_task.rb +36 -34
  32. data/lib/pindo/module/task/model/build/android_build_gplay_task.rb +13 -187
  33. data/lib/pindo/module/task/model/build/ios_build_adhoc_task.rb +9 -6
  34. data/lib/pindo/module/task/model/build/ios_build_appstore_task.rb +9 -6
  35. data/lib/pindo/module/task/model/build/ios_build_dev_task.rb +37 -32
  36. data/lib/pindo/module/task/model/build/web_build_dev_task.rb +7 -5
  37. data/lib/pindo/module/task/model/build_task.rb +8 -11
  38. data/lib/pindo/module/task/model/git/git_commit_task.rb +118 -0
  39. data/lib/pindo/module/task/model/git/git_tag_task.rb +125 -0
  40. data/lib/pindo/module/task/model/git_task.rb +75 -0
  41. data/lib/pindo/module/task/model/jps/jps_message_task.rb +178 -0
  42. data/lib/pindo/module/task/model/{resign → jps}/jps_resign_task.rb +13 -22
  43. data/lib/pindo/module/task/model/jps/jps_upload_media_task.rb +248 -0
  44. data/lib/pindo/module/task/model/jps/jps_upload_task.rb +38 -93
  45. data/lib/pindo/module/task/model/jps_task.rb +43 -0
  46. data/lib/pindo/module/task/model/resign/ipa_local_resign_task.rb +5 -0
  47. data/lib/pindo/module/task/model/unity/unity_config_task.rb +0 -4
  48. data/lib/pindo/module/task/model/unity/unity_export_task.rb +8 -7
  49. data/lib/pindo/module/task/model/unity/unity_update_task.rb +4 -3
  50. data/lib/pindo/module/task/model/unity/unity_yoo_asset_task.rb +8 -7
  51. data/lib/pindo/module/task/model/unity_task.rb +7 -2
  52. data/lib/pindo/module/task/pindo_task.rb +101 -1
  53. data/lib/pindo/module/task/task_manager.rb +29 -32
  54. data/lib/pindo/module/unity/nuget_helper.rb +7 -7
  55. data/lib/pindo/options/core/global_options_state.rb +96 -26
  56. data/lib/pindo/options/core/option_configuration.rb +3 -0
  57. data/lib/pindo/options/core/option_item.rb +36 -0
  58. data/lib/pindo/options/groups/build_options.rb +23 -6
  59. data/lib/pindo/options/groups/git_options.rb +115 -0
  60. data/lib/pindo/options/groups/jps_options.rb +7 -0
  61. data/lib/pindo/options/groups/option_group.rb +15 -0
  62. data/lib/pindo/options/groups/unity_options.rb +49 -0
  63. data/lib/pindo/options/options.rb +2 -0
  64. data/lib/pindo/version.rb +2 -2
  65. metadata +15 -11
  66. data/lib/pindo/base/githelper.rb +0 -686
  67. data/lib/pindo/base/pindocontext.rb +0 -602
  68. data/lib/pindo/command/utils/feishu.rb +0 -134
  69. data/lib/pindo/module/build/version_helper.rb +0 -146
  70. data/lib/pindo/module/task/model/git_tag_task.rb +0 -80
@@ -6,12 +6,15 @@ require 'pindo/base/executable'
6
6
  require 'pindo/module/unity/unity_helper'
7
7
  require 'pindo/module/build/build_helper'
8
8
  require 'pindo/module/task/task_manager'
9
- require 'pindo/module/task/model/git_tag_task'
9
+ require 'pindo/module/task/model/git/git_commit_task'
10
+ require 'pindo/module/task/model/git/git_tag_task'
10
11
  require 'pindo/module/task/model/unity/unity_update_task'
11
12
  require 'pindo/module/task/model/unity/unity_yoo_asset_task'
12
13
  require 'pindo/module/task/model/unity/unity_export_task'
13
14
  require 'pindo/module/task/model/build_task'
14
15
  require 'pindo/module/task/model/jps/jps_upload_task'
16
+ require 'pindo/module/task/model/jps/jps_message_task'
17
+ require 'pindo/options/options'
15
18
 
16
19
  module Pindo
17
20
  class Command
@@ -19,7 +22,6 @@ module Pindo
19
22
  class Autobuild < Web
20
23
 
21
24
  include Appselect
22
- include Pindo::Githelper
23
25
 
24
26
  self.summary = '打包Unity WebGL包'
25
27
 
@@ -56,34 +58,42 @@ module Pindo
56
58
  # 暂无参数
57
59
  ]
58
60
 
61
+ # 定义此命令使用的参数项
62
+ def self.option_items
63
+ @option_items ||= Pindo::Options::OptionGroup.merge(
64
+ Pindo::Options::JPSOptions.select(:proj, :upload, :send),
65
+ Pindo::Options::UnityOptions.select(:skiplib, :skipyoo),
66
+ Pindo::Options::UnityOptions.select_with_defaults(skipconfig: true),
67
+ Pindo::Options::GitOptions.all
68
+ )
69
+ end
70
+
59
71
  # 命令的选项列表
60
72
  def self.options
61
73
  [
62
74
  ['--bundleid', '指定打包的bundleID'],
63
- # 指定上传到JPS的项目
64
- ['--proj', '指定上传到测试平台的项目名称'],
65
- # 上传编译包
66
- ['--upload', '上传编译后的ipa到测试平台'],
67
- # 发送通知
68
- ['--send', '上传成功后发送测试通知'],
69
- # 编译完成后再本地打开webgl包
70
- ['--run', '编译完成后再本地打开webgl包'],
71
- ['--skiplib', '跳过Unity必备库更新(加快构建速度)'],
72
- ['--skipyoo', '跳过YooAsset资源打包(加快构建速度)']
73
- ].concat(super)
75
+ ['--run', '编译完成后再本地打开webgl包']
76
+ ].concat(option_items.map(&:to_claide_option)).concat(super)
74
77
  end
75
78
 
76
79
  def initialize(argv)
80
+ @options = initialize_options(argv)
77
81
 
78
82
  @args_deploy_flag = argv.flag?('deploy', false)
79
83
  @args_adhoc_flag = argv.flag?('adhoc', false)
80
- @args_upload_flag = argv.flag?('upload', false)
81
- @args_send_flag = argv.flag?('send', false)
82
- @args_proj_name = argv.option('proj')
84
+ @args_upload_flag = @options[:upload] || false
85
+ @args_send_flag = @options[:send] || false
86
+ @args_proj_name = @options[:proj]
83
87
  @args_bundle_id = argv.option('bundleid')
84
88
  @args_run_flag = argv.flag?('run', false)
85
- @args_skip_lib = argv.flag?('skiplib', false)
86
- @args_skip_yoo = argv.flag?('skipyoo', false)
89
+ @args_skip_lib = @options[:skiplib] || false
90
+ @args_skip_yoo = @options[:skipyoo] || false
91
+
92
+ # Git 参数
93
+ @args_release_branch = @options[:release_branch] || 'master'
94
+ @args_ver_inc = Pindo::Options::GitOptions.parse_version_increase_type(@options[:ver_inc] || 'mini')
95
+ @args_tag_type = Pindo::Options::GitOptions.parse_create_tag_type(@options[:tag_type] || 'new')
96
+ @args_tag_pre = @options[:tag_pre] || 'v'
87
97
 
88
98
  if @args_send_flag
89
99
  @args_upload_flag = true
@@ -102,10 +112,7 @@ module Pindo
102
112
  pindo_project_dir = Dir.pwd
103
113
 
104
114
  # 加载 JPS 配置(如果存在)
105
- context = Pindo::PindoContext.instance
106
- context.load_and_apply_jps_config(pindo_project_dir)
107
- # 确认并应用缓存(如果有)
108
- context.confirm_and_apply_cache
115
+ Pindo::BuildHelper.share_instance.load_jps_build_config(pindo_project_dir)
109
116
 
110
117
  # 准备配置
111
118
  config = prepare_web_config(pindo_project_dir)
@@ -195,18 +202,34 @@ module Pindo
195
202
  # Web 只支持 Unity 工程
196
203
  tasks = []
197
204
 
198
- # 1. Git 标签任务(如果需要上传)
205
+ # 1. Git 提交任务(如果需要上传)
199
206
  if @args_upload_flag
207
+ git_commit_task = Pindo::TaskSystem::GitCommitTask.new(
208
+ config[:project_path],
209
+ release_branch: @args_release_branch,
210
+ ver_inc: @args_ver_inc,
211
+ tag_type: @args_tag_type,
212
+ tag_pre: @args_tag_pre
213
+ )
214
+ tasks << git_commit_task
215
+ last_task = git_commit_task
216
+
217
+ # 2. Git 标签任务(依赖提交任务,在 Unity 导出之前创建)
200
218
  git_tag_task = Pindo::TaskSystem::GitTagTask.new(
201
- config[:project_path]
219
+ config[:project_path],
220
+ release_branch: @args_release_branch,
221
+ ver_inc: @args_ver_inc,
222
+ tag_type: @args_tag_type,
223
+ tag_pre: @args_tag_pre
202
224
  )
225
+ git_tag_task.dependencies << git_commit_task.id
203
226
  tasks << git_tag_task
227
+ last_task = git_tag_task
228
+ else
229
+ last_task = nil
204
230
  end
205
231
 
206
- # 记录上一个任务,用于依赖链
207
- last_task = tasks.first
208
-
209
- # 2. Unity 更新必备库任务(可选)
232
+ # 3. Unity 更新必备库任务(可选)
210
233
  unless @args_skip_lib
211
234
  unity_update_task = Pindo::TaskSystem::UnityUpdateTask.new(
212
235
  project_path: config[:project_path]
@@ -216,7 +239,7 @@ module Pindo
216
239
  last_task = unity_update_task
217
240
  end
218
241
 
219
- # 3. Unity YooAsset 资源构建任务(可选,依赖上一个任务)
242
+ # 4. Unity YooAsset 资源构建任务(可选,依赖上一个任务)
220
243
  unless @args_skip_yoo
221
244
  unity_yoo_task = Pindo::TaskSystem::UnityYooAssetTask.new(
222
245
  'web',
@@ -227,7 +250,7 @@ module Pindo
227
250
  last_task = unity_yoo_task
228
251
  end
229
252
 
230
- # 4. Unity 导出任务(依赖上一个任务)
253
+ # 5. Unity 导出任务(依赖上一个任务)
231
254
  # Web 平台导出路径
232
255
  web_export_path = File.join(config[:project_path], "GoodPlatform", "WebGL")
233
256
 
@@ -244,7 +267,7 @@ module Pindo
244
267
  unity_export_task.dependencies << last_task.id if last_task
245
268
  tasks << unity_export_task
246
269
 
247
- # 5. 构建任务(Web 只需要检查输出)
270
+ # 6. 构建任务(Web 只需要检查输出)
248
271
  build_task = Pindo::TaskSystem::BuildTask.create_task(
249
272
  platform: :web,
250
273
  mode: :dev,
@@ -260,23 +283,34 @@ module Pindo
260
283
  build_task.dependencies << unity_export_task.id
261
284
  tasks << build_task
262
285
 
263
- # 6. 上传任务(如果需要)
286
+ # 7. 上传和消息发送任务(如果需要)
264
287
  if @args_upload_flag
265
288
  # WebGL 输出路径: GoodPlatform/WebGL/build
266
289
  webgl_build_path = File.join(config[:project_path], 'GoodPlatform', 'WebGL', 'build')
290
+
291
+ # 7.1 创建上传任务
267
292
  upload_task = Pindo::TaskSystem::JPSUploadTask.new(
268
293
  'html',
269
294
  webgl_build_path,
270
295
  nil,
271
296
  app_info_obj: config[:app_info_obj],
272
297
  workflow_info: config[:workflow_info],
273
- project_name: @args_proj_name,
274
- context: {
275
- send_to_chat: @args_send_flag
276
- },
277
- dependencies: [build_task.id]
298
+ project_name: @args_proj_name
278
299
  )
300
+ upload_task.dependencies << build_task.id
279
301
  tasks << upload_task
302
+
303
+ # 7.2 创建消息发送任务(依赖上传任务)
304
+ # app_version_info 将从 upload_task 的数据参数中获取
305
+ message_task = Pindo::TaskSystem::JPSMessageTask.new(
306
+ nil, # app_version_info 为 nil,从依赖任务获取
307
+ app_info_obj: config[:app_info_obj],
308
+ project_name: @args_proj_name,
309
+ send_message_type: @args_send_flag ? 'group' : 'self',
310
+ data_dependencies: [upload_task.id] # 从 upload_task 获取数据
311
+ )
312
+ message_task.dependencies << upload_task.id # 执行顺序依赖
313
+ tasks << message_task
280
314
  end
281
315
 
282
316
  tasks
data/lib/pindo/command.rb CHANGED
@@ -6,8 +6,6 @@ require 'pindo/version'
6
6
  require 'pindo/base/funlog'
7
7
  require 'pindo/base/hashhelper'
8
8
  require 'pindo/base/plaininformative'
9
- require 'pindo/base/githelper'
10
- require 'pindo/base/pindocontext'
11
9
  require 'pindo/client/giteeclient'
12
10
  require 'pindo/config/pindoconfig'
13
11
 
@@ -22,7 +20,6 @@ module Pindo
22
20
 
23
21
  class Command < CLAide::Command
24
22
 
25
- include Pindo::Githelper
26
23
  include Pindoconfig::Mixin
27
24
  include Funlog::Mixin
28
25
 
@@ -61,8 +58,6 @@ module Pindo
61
58
  def self.use_cache?
62
59
  false # 默认不使用缓存
63
60
  end
64
- # 注意:缓存组的定义已经移至 PindoContext#get_command_group 中统一管理
65
- # 使用命令名作为组名,如 ios:autobuild, and:autobuild, web:autobuild
66
61
 
67
62
  # 自动推导命令名称
68
63
  # @return [String] 命令名称,例如:Pindo::Command::Ios::Autobuild → 'ios:autobuild'
@@ -123,8 +118,6 @@ module Pindo
123
118
  end
124
119
 
125
120
  def self.run(argv)
126
- # 直接调用父类的 run 方法
127
- # PindoContext 的设置在 initialize 中处理
128
121
  super(argv)
129
122
  end
130
123
 
@@ -143,55 +136,6 @@ module Pindo
143
136
 
144
137
  # 设置全局 verbose 标志
145
138
  ENV['PINDO_VERBOSE'] = '1' if @args_verbose_flag
146
-
147
- # 在非抽象命令初始化时设置上下文(但不在显示帮助时)
148
- if !self.class.abstract_command? && !is_help_request
149
- context = Pindo::PindoContext.instance
150
-
151
- # 只在上下文未设置时才设置(避免重复设置)
152
- if context.instance_variable_get(:@current_command).nil?
153
- # 获取完整的命令路径
154
- command_parts = []
155
- current = self.class
156
- while current < Pindo::Command
157
- if current.command && current.command != 'pindo'
158
- command_parts.unshift(current.command)
159
- end
160
- current = current.superclass
161
- end
162
- command_name = command_parts.empty? ? self.class.command : command_parts.join(':')
163
-
164
- # 配置选项
165
- cache_enabled_value = self.class.respond_to?(:use_cache?) ? self.class.use_cache? : false
166
- options = {
167
- cache_enabled: cache_enabled_value,
168
- verbose: @args_verbose_flag
169
- }
170
-
171
- # 获取项目根目录(Git仓库根目录或当前目录)
172
- project_dir = get_project_root_directory(Dir.pwd)
173
-
174
- context.set_context(command_name, project_dir, options)
175
- end
176
- end
177
- end
178
-
179
- private
180
-
181
- # 获取项目根目录(优先使用Git仓库根目录)
182
- def get_project_root_directory(current_dir)
183
- # 尝试获取Git仓库根目录
184
- begin
185
- git_root = `cd "#{current_dir}" && git rev-parse --show-toplevel 2>/dev/null`.strip
186
- if $?.success? && !git_root.empty?
187
- return git_root
188
- end
189
- rescue
190
- # git命令失败,继续使用当前目录
191
- end
192
-
193
- # 如果不是Git仓库,返回当前目录
194
- current_dir
195
139
  end
196
140
 
197
141
  end
@@ -1,6 +1,6 @@
1
1
  require 'singleton'
2
2
  require 'fileutils'
3
- require 'pindo/base/githelper'
3
+ require 'pindo/base/git_handler'
4
4
  require 'pindo/config/pindoconfig'
5
5
 
6
6
  module Pindo
@@ -9,7 +9,6 @@ module Pindo
9
9
  # 负责管理应用配置仓库的拉取、更新等操作
10
10
  class BuildInfoManager
11
11
  include Singleton
12
- include Pindo::Githelper
13
12
  include Pindo::Pindoconfig::Mixin
14
13
 
15
14
  class << self
@@ -30,7 +29,7 @@ module Pindo
30
29
 
31
30
  # 获取配置仓库目录
32
31
  begin
33
- app_config_dir = clong_buildconfig_repo(repo_name: normalized_repo_name)
32
+ app_config_dir = Pindo::GitHandler.clong_buildconfig_repo(repo_name: normalized_repo_name)
34
33
  rescue StandardError => e
35
34
  puts "拉取配置仓库失败: #{e.message}"
36
35
  return false
@@ -71,7 +70,7 @@ module Pindo
71
70
  gitee_client = GiteeClient.new(access_token: pindo_single_config.gitee_api_key)
72
71
 
73
72
  # 获取模板配置仓库目录
74
- demo_dir = clong_buildconfig_repo(repo_name: pindo_single_config.demo_bundle_id)
73
+ demo_dir = Pindo::GitHandler.clong_buildconfig_repo(repo_name: pindo_single_config.demo_bundle_id)
75
74
 
76
75
  # 确定仓库公开类型和所有者组织
77
76
  public_type = 0
@@ -97,7 +96,7 @@ module Pindo
97
96
  end
98
97
 
99
98
  # 克隆配置仓库
100
- app_config_dir = clong_buildconfig_repo(repo_name: repo_name)
99
+ app_config_dir = Pindo::GitHandler.clong_buildconfig_repo(repo_name: repo_name)
101
100
  system "open #{app_config_dir}"
102
101
 
103
102
  if File.exist?(app_config_dir)
@@ -115,7 +114,7 @@ module Pindo
115
114
  end
116
115
  else
117
116
  # 仓库已存在,直接打开
118
- app_config_dir = clong_buildconfig_repo(repo_name: repo_name)
117
+ app_config_dir = Pindo::GitHandler.clong_buildconfig_repo(repo_name: repo_name)
119
118
  system "open #{app_config_dir}"
120
119
  puts "⚠ 配置仓库已存在: #{app_config_dir}"
121
120
  return app_config_dir
@@ -169,7 +168,7 @@ module Pindo
169
168
  f.write(JSON.pretty_generate(git_repo_json))
170
169
  end
171
170
 
172
- git_addpush_repo(path: pindo_setting_dir, message: "add #{repo_name}")
171
+ Pindo::GitHandler.git_addpush_repo(path: pindo_setting_dir, message: "add #{repo_name}")
173
172
  end
174
173
 
175
174
  # 更新应用配置仓库(从模板复制)
@@ -201,7 +200,7 @@ module Pindo
201
200
  end
202
201
 
203
202
  # 提交并推送到远程仓库
204
- git_addpush_repo(path: app_config_dir, message: "init app config")
203
+ Pindo::GitHandler.git_addpush_repo(path: app_config_dir, message: "init app config")
205
204
  end
206
205
  end
207
206
 
@@ -5,6 +5,7 @@ require_relative 'android_project_helper'
5
5
  require_relative '../../base/executable'
6
6
  require_relative 'android_res_helper'
7
7
  require 'pindo/module/build/icon_downloader'
8
+ require 'pindo/module/build/git_repo_helper'
8
9
 
9
10
  module Pindo
10
11
 
@@ -64,7 +65,7 @@ module Pindo
64
65
  raise ArgumentError, "版本号不能为空" if version_code.nil?
65
66
 
66
67
  # 验证version_code的有效性
67
- unless valid_build_number?(version_code)
68
+ unless Pindo::GitRepoHelper.share_instance.valid_build_number?(version_code)
68
69
  Funlog.instance.fancyinfo_error("Android versionCode必须在1到#{2**31-1}之间,当前值:#{version_code}")
69
70
  return false
70
71
  end
@@ -176,16 +177,6 @@ module Pindo
176
177
  end
177
178
  end
178
179
 
179
- # 验证Build号是否在有效范围内
180
- # @param build_number [Integer] Build号
181
- # @return [Boolean] 是否有效
182
- def self.valid_build_number?(build_number)
183
- return false if build_number.nil?
184
-
185
- # Android versionCode的有效范围是1到2^31-1
186
- build_number >= 1 && build_number <= 2**31 - 1
187
- end
188
-
189
180
  # 使用package_name更新Android应用名称(strings.xml中的app_name)
190
181
  # @param project_dir [String] Android项目目录路径
191
182
  # @param package_name [String] 工作流的package_name(如:"Test Demo")
@@ -134,25 +134,12 @@ module Pindo
134
134
  end
135
135
 
136
136
  def get_selected_dev_bundleid()
137
- # 检查环境变量
138
- env_bundleid = ENV['PINDO_BUNDLE_ID']
139
- if env_bundleid && !env_bundleid.empty?
140
- puts "\n使用环境变量指定的Bundle ID: #{env_bundleid}"
141
- puts
142
- # 保存到缓存
143
- require_relative '../base/pindocontext'
144
- context = Pindo::PindoContext.instance
145
- context.set_selection(Pindo::PindoContext::SelectionKey::BUNDLE_ID, env_bundleid)
146
- return env_bundleid
147
- end
137
+ state = Pindo::Options::GlobalOptionsState.instance
148
138
 
149
- # 检查缓存
150
- require_relative '../base/pindocontext'
151
- context = Pindo::PindoContext.instance
152
- cached_bundleid = context.get_selection(Pindo::PindoContext::SelectionKey::BUNDLE_ID)
153
-
154
- if cached_bundleid
155
- puts "\n使用之前选择的Bundle ID: #{cached_bundleid}"
139
+ # 检查 GlobalOptionsState 缓存(已包含环境变量和命令行参数)
140
+ cached_bundleid = state[:bundleid]
141
+ if cached_bundleid && !cached_bundleid.empty?
142
+ puts "\n使用已配置的Bundle ID: #{cached_bundleid}"
156
143
  puts
157
144
  return cached_bundleid
158
145
  end
@@ -164,7 +151,7 @@ module Pindo
164
151
  cli = HighLine.new
165
152
  menu_choice="None"
166
153
  puts
167
- cli.choose do |menu| # you can also use constants like :blue
154
+ cli.choose do |menu|
168
155
  menu.header = "可用的Bundle Id如下:"
169
156
  menu.prompt = "请选择使用的Bundle Id,请输入选项(1/2/3...):"
170
157
  if !all_bundleid.nil? && all_bundleid.length > 0
@@ -183,8 +170,8 @@ module Pindo
183
170
  menu_choice = "com.heroneverdie101"
184
171
  end
185
172
 
186
- # 保存选择到缓存
187
- context.set_selection(Pindo::PindoContext::SelectionKey::BUNDLE_ID, menu_choice)
173
+ # 保存选择到 GlobalOptionsState
174
+ state[:bundleid] = menu_choice
188
175
 
189
176
  return menu_choice;
190
177
 
@@ -218,25 +205,12 @@ module Pindo
218
205
  end
219
206
 
220
207
  def get_selected_dev_bundle_name()
221
- # 检查环境变量
222
- env_bundle_name = ENV['PINDO_BUNDLE_NAME']
223
- if env_bundle_name && !env_bundle_name.empty?
224
- puts "\n使用环境变量指定的Bundle Name: #{env_bundle_name}"
225
- puts
226
- # 保存到缓存
227
- require_relative '../base/pindocontext'
228
- context = Pindo::PindoContext.instance
229
- context.set_selection(Pindo::PindoContext::SelectionKey::ANDROID_BUNDLE_NAME, env_bundle_name)
230
- return env_bundle_name
231
- end
232
-
233
- # 检查缓存
234
- require_relative '../base/pindocontext'
235
- context = Pindo::PindoContext.instance
236
- cached_bundle_name = context.get_selection(Pindo::PindoContext::SelectionKey::ANDROID_BUNDLE_NAME)
208
+ state = Pindo::Options::GlobalOptionsState.instance
237
209
 
238
- if cached_bundle_name
239
- puts "\n使用之前选择的Bundle Name: #{cached_bundle_name}"
210
+ # 检查 GlobalOptionsState 缓存(已包含环境变量和命令行参数)
211
+ cached_bundle_name = state[:bundle_name]
212
+ if cached_bundle_name && !cached_bundle_name.empty?
213
+ puts "\n使用已配置的Bundle Name: #{cached_bundle_name}"
240
214
  puts
241
215
  return cached_bundle_name
242
216
  end
@@ -265,8 +239,8 @@ module Pindo
265
239
  puts "选择的Bundle Name是: #{menu_choice}"
266
240
  puts
267
241
 
268
- # 保存选择到缓存
269
- context.set_selection(Pindo::PindoContext::SelectionKey::ANDROID_BUNDLE_NAME, menu_choice)
242
+ # 保存选择到 GlobalOptionsState
243
+ state[:bundle_name] = menu_choice
270
244
 
271
245
  return menu_choice
272
246
  end
@@ -180,16 +180,13 @@ module Pindo
180
180
 
181
181
  # 修改远程配置仓库
182
182
  begin
183
- require_relative '../../base/githelper'
184
- include Pindo::Githelper
185
-
186
- app_config_dir = clong_buildconfig_repo(repo_name: bundle_id)
183
+ app_config_dir = Pindo::GitHandler.clong_buildconfig_repo(repo_name: bundle_id)
187
184
  app_config_file = File.join(app_config_dir, "config.json")
188
185
 
189
186
  if File.exist?(app_config_file)
190
187
  modify_appconfig_file(config_file: app_config_file, app_info_detail: app)
191
- prepare_gitenv()
192
- git_addpush_repo(path: app_config_dir, message: "modify apple id")
188
+ Pindo::GitHandler.prepare_gitenv()
189
+ Pindo::GitHandler.git_addpush_repo(path: app_config_dir, message: "modify apple id")
193
190
  end
194
191
  rescue StandardError => e
195
192
  puts "更新远程配置仓库失败: #{e.message}"
@@ -14,24 +14,6 @@ module Pindo
14
14
  end
15
15
  end
16
16
 
17
- def delete_libtarget_firebase_shell(project_path)
18
- puts "[-] 开始检查并删除 Unity-iPhone下的Firebase Crashlytics脚本..."
19
- if File.directory?(File.join(project_path, 'Unity')) && File.exist?(File.join(project_path, 'Unity', 'Unity-iPhone.xcodeproj'))
20
- unity_project_path = File.join(project_path, 'Unity', 'Unity-iPhone.xcodeproj')
21
- xcdoe_unitylib_project = Xcodeproj::Project::open(unity_project_path)
22
- xcdoe_unitylib_project.targets.each do |target|
23
- target.shell_script_build_phases&.each do |phase|
24
- if phase.name.eql?("Crashlytics Run Script")
25
- puts " 从target:#{target.name}中删除: #{phase.name} ..."
26
- target.build_phases.delete(phase)
27
- end
28
- end
29
- end
30
- xcdoe_unitylib_project.save()
31
- puts "[✔] 完成检查并删除 Unity-iPhone下的Firebase Crashlytics脚本..."
32
- end
33
- end
34
-
35
17
  def unity_project?(project_path)
36
18
  # 检查Unity工程的关键文件和目录
37
19
  project_settings_path = File.join(project_path, "ProjectSettings")
@@ -208,6 +190,34 @@ module Pindo
208
190
  target_dir: target_dir
209
191
  )
210
192
  end
193
+
194
+ # 加载 JPSBuildConfig.json 并设置项目名称到 GlobalOptionsState
195
+ # @param project_dir [String] 项目目录
196
+ # @return [String, nil] 项目名称(如果存在)
197
+ def load_jps_build_config(project_dir)
198
+ # 检测工程类型:Unity 工程配置在 ProjectSettings 目录
199
+ config_file = if unity_project?(project_dir)
200
+ File.join(project_dir, 'ProjectSettings', 'JPSBuildConfig.json')
201
+ else
202
+ File.join(project_dir, 'JPSBuildConfig.json')
203
+ end
204
+
205
+ return nil unless File.exist?(config_file)
206
+
207
+ begin
208
+ config = JSON.parse(File.read(config_file))
209
+ project_name = config['project_name']
210
+ if project_name && !project_name.empty?
211
+ # 设置到 GlobalOptionsState
212
+ Pindo::Options::GlobalOptionsState.instance[:proj] = project_name
213
+ puts "使用 JPS 配置的项目名称: #{project_name}"
214
+ return project_name
215
+ end
216
+ rescue => e
217
+ puts "加载 JPSBuildConfig.json 失败: #{e.message}" if ENV['PINDO_VERBOSE'] == '1'
218
+ end
219
+ nil
220
+ end
211
221
  end
212
222
 
213
223
  end