pindo 5.13.7 → 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 (74) 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 +104 -31
  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 +52 -15
  7. data/lib/pindo/command/appstore/autobuild.rb +104 -8
  8. data/lib/pindo/command/appstore/autoresign.rb +3 -5
  9. data/lib/pindo/command/ios/autobuild.rb +96 -32
  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 +49 -21
  13. data/lib/pindo/command/jps.rb +1 -0
  14. data/lib/pindo/command/unity/autobuild.rb +141 -32
  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 +98 -34
  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/{jps_resign_task.rb → jps/jps_resign_task.rb} +14 -23
  43. data/lib/pindo/module/task/model/jps/jps_upload_media_task.rb +248 -0
  44. data/lib/pindo/module/task/model/{jps_upload_task.rb → jps/jps_upload_task.rb} +39 -94
  45. data/lib/pindo/module/task/model/jps_task.rb +43 -0
  46. data/lib/pindo/module/task/model/{ipa_local_resign_task.rb → resign/ipa_local_resign_task.rb} +7 -2
  47. data/lib/pindo/module/task/model/unity/unity_config_task.rb +103 -0
  48. data/lib/pindo/module/task/model/{unity_export_task.rb → unity/unity_export_task.rb} +76 -78
  49. data/lib/pindo/module/task/model/unity/unity_update_task.rb +95 -0
  50. data/lib/pindo/module/task/model/unity/unity_yoo_asset_task.rb +156 -0
  51. data/lib/pindo/module/task/model/unity_task.rb +118 -0
  52. data/lib/pindo/module/task/pindo_task.rb +101 -1
  53. data/lib/pindo/module/task/task_manager.rb +29 -24
  54. data/lib/pindo/module/unity/nuget_helper.rb +7 -7
  55. data/lib/pindo/module/unity/unity_command_helper.rb +188 -0
  56. data/lib/pindo/module/unity/unity_env_helper.rb +208 -0
  57. data/lib/pindo/module/unity/unity_helper.rb +189 -746
  58. data/lib/pindo/module/unity/unity_proc_helper.rb +390 -0
  59. data/lib/pindo/options/core/global_options_state.rb +96 -26
  60. data/lib/pindo/options/core/option_configuration.rb +3 -0
  61. data/lib/pindo/options/core/option_item.rb +36 -0
  62. data/lib/pindo/options/groups/build_options.rb +23 -6
  63. data/lib/pindo/options/groups/git_options.rb +115 -0
  64. data/lib/pindo/options/groups/jps_options.rb +7 -0
  65. data/lib/pindo/options/groups/option_group.rb +15 -0
  66. data/lib/pindo/options/groups/unity_options.rb +49 -0
  67. data/lib/pindo/options/options.rb +2 -0
  68. data/lib/pindo/version.rb +2 -2
  69. metadata +25 -14
  70. data/lib/pindo/base/githelper.rb +0 -686
  71. data/lib/pindo/base/pindocontext.rb +0 -602
  72. data/lib/pindo/command/utils/feishu.rb +0 -134
  73. data/lib/pindo/module/build/version_helper.rb +0 -146
  74. data/lib/pindo/module/task/model/git_tag_task.rb +0 -80
@@ -9,9 +9,15 @@ require 'pindo/module/xcode/xcode_app_config'
9
9
  require 'pindo/module/xcode/xcode_build_helper'
10
10
  require 'pindo/config/ios_config_parser'
11
11
  require 'pindo/config/build_info_manager'
12
+ require 'pindo/config/pindoconfig'
12
13
  require 'pindo/module/task/task_manager'
13
- require 'pindo/module/task/model/unity_export_task'
14
+ require 'pindo/module/task/model/unity/unity_config_task'
15
+ require 'pindo/module/task/model/unity/unity_update_task'
16
+ require 'pindo/module/task/model/unity/unity_yoo_asset_task'
17
+ require 'pindo/module/task/model/unity/unity_export_task'
14
18
  require 'pindo/module/task/model/build_task'
19
+ require 'pindo/module/task/model/git/git_commit_task'
20
+ require 'pindo/module/task/model/git/git_tag_task'
15
21
  require 'pindo/options/options'
16
22
 
17
23
  module Pindo
@@ -58,13 +64,17 @@ module Pindo
58
64
 
59
65
  # 定义此命令使用的参数项
60
66
  def self.option_items
61
- @option_items ||= Pindo::Options::BuildOptions.select(:bundleid)
67
+ @option_items ||= Pindo::Options::OptionGroup.merge(
68
+ Pindo::Options::BuildOptions.select(:bundleid),
69
+ Pindo::Options::UnityOptions.all,
70
+ Pindo::Options::GitOptions.except(:tag_pre),
71
+ Pindo::Options::GitOptions.select_with_defaults(tag_pre: 'ios_release_')
72
+ )
62
73
  end
63
74
 
64
75
  # 命令的选项列表
65
76
  def self.options
66
- # 转换为 CLAide 格式
67
- option_items.map { |item| item.to_claide_option }.concat(super)
77
+ option_items.map(&:to_claide_option).concat(super)
68
78
  end
69
79
 
70
80
  def initialize(argv)
@@ -77,6 +87,14 @@ module Pindo
77
87
  # 保存参数到实例变量
78
88
  # 优先使用选项参数,如果没有则使用位置参数
79
89
  @args_bundle_id = @options[:bundleid] || positional_bundleid
90
+ @args_skip_config = argv.flag?('skipconfig', false)
91
+ @args_skip_lib = argv.flag?('skiplib', false)
92
+ @args_skip_yoo = argv.flag?('skipyoo', false)
93
+
94
+ # Git 参数
95
+ @args_release_branch = @options[:release_branch] || 'master'
96
+ @args_tag_type = Pindo::Options::GitOptions.parse_create_tag_type(@options[:tag_type] || 'new')
97
+ @args_tag_pre = @options[:tag_pre] || 'ios_release_'
80
98
 
81
99
  super(argv)
82
100
  end
@@ -166,20 +184,67 @@ module Pindo
166
184
 
167
185
  tasks = []
168
186
 
169
- # 1. Unity 导出任务(仅 Unity 工程)
187
+ # 0. Git 提交任务(使用 IosConfigParser 的版本号)
188
+ fixed_version = Pindo::IosConfigParser.instance.app_version
189
+ git_commit_task = Pindo::TaskSystem::GitCommitTask.new(
190
+ project_path,
191
+ release_branch: @args_release_branch,
192
+ tag_type: @args_tag_type,
193
+ tag_pre: @args_tag_pre,
194
+ fixed_version: fixed_version
195
+ )
196
+ tasks << git_commit_task
197
+ last_task = git_commit_task
198
+
199
+ # 1. Unity 任务链(仅 Unity 工程)
170
200
  if is_unity
171
201
  # 确定 iOS 导出路径
172
202
  base_ios_path = File.join(project_path, "GoodPlatform", "BaseiOS")
173
203
  ios_path = File.join(project_path, "GoodPlatform", "iOS")
174
204
  ios_export_path = File.exist?(base_ios_path) ? base_ios_path : ios_path
175
205
 
176
- unity_task = Pindo::TaskSystem::UnityExportTask.new(
206
+ # 1.1 Unity 配置编译模式任务(可选)
207
+ unless @args_skip_config
208
+ unity_config_task = Pindo::TaskSystem::UnityConfigTask.new(
209
+ 'release', # AppStore 使用 release 模式
210
+ project_path: project_path
211
+ )
212
+ unity_config_task.dependencies << last_task.id
213
+ tasks << unity_config_task
214
+ last_task = unity_config_task
215
+ end
216
+
217
+ # 1.2 Unity 更新必备库任务(可选)
218
+ unless @args_skip_lib
219
+ unity_update_task = Pindo::TaskSystem::UnityUpdateTask.new(
220
+ project_path: project_path
221
+ )
222
+ unity_update_task.dependencies << last_task.id
223
+ tasks << unity_update_task
224
+ last_task = unity_update_task
225
+ end
226
+
227
+ # 1.3 Unity YooAsset 资源构建任务(可选,依赖上一个任务)
228
+ unless @args_skip_yoo
229
+ unity_yoo_task = Pindo::TaskSystem::UnityYooAssetTask.new(
230
+ 'ios',
231
+ project_path: project_path
232
+ )
233
+ unity_yoo_task.dependencies << last_task.id
234
+ tasks << unity_yoo_task
235
+ last_task = unity_yoo_task
236
+ end
237
+
238
+ # 1.4 Unity 导出任务(依赖上一个任务)
239
+ unity_export_task = Pindo::TaskSystem::UnityExportTask.new(
177
240
  'ios',
178
241
  project_path: project_path,
179
242
  export_path: ios_export_path,
180
243
  deploy_mode: 'release' # AppStore 使用 release 模式
181
244
  )
182
- tasks << unity_task
245
+ unity_export_task.dependencies << last_task.id
246
+ tasks << unity_export_task
247
+ last_task = unity_export_task
183
248
  end
184
249
 
185
250
  # 2. 构建任务
@@ -202,9 +267,40 @@ module Pindo
202
267
  mode: :release,
203
268
  options: build_options
204
269
  )
205
- build_task.dependencies << tasks.last.id if tasks.any?
270
+ build_task.dependencies << last_task.id
206
271
  tasks << build_task
207
272
 
273
+ # 3. Git 标签任务 - 项目仓库(使用 IosConfigParser 的版本号)
274
+ fixed_version = Pindo::IosConfigParser.instance.app_version
275
+ git_tag_task = Pindo::TaskSystem::GitTagTask.new(
276
+ project_path,
277
+ release_branch: @args_release_branch,
278
+ tag_type: @args_tag_type,
279
+ tag_pre: @args_tag_pre,
280
+ fixed_version: fixed_version
281
+ )
282
+ git_tag_task.dependencies << build_task.id
283
+ tasks << git_tag_task
284
+
285
+ # 4. Git 标签任务 - 配置仓库(使用 IosConfigParser 的版本号)
286
+ app_repo_name = Pindo::IosConfigParser.instance.app_repo_name
287
+ if app_repo_name && !app_repo_name.empty?
288
+ pindo_dir = File.expand_path(Pindoconfig.instance.pindo_dir)
289
+ config_repo_path = File.join(pindo_dir, app_repo_name)
290
+
291
+ if File.exist?(config_repo_path)
292
+ config_git_tag_task = Pindo::TaskSystem::GitTagTask.new(
293
+ config_repo_path,
294
+ release_branch: @args_release_branch,
295
+ tag_type: @args_tag_type,
296
+ tag_pre: @args_tag_pre,
297
+ fixed_version: fixed_version
298
+ )
299
+ config_git_tag_task.dependencies << git_tag_task.id
300
+ tasks << config_git_tag_task
301
+ end
302
+ end
303
+
208
304
  tasks
209
305
  else
210
306
  raise Informative, "当前目录不是工程目录,不能编译"
@@ -5,10 +5,9 @@ require 'fileutils'
5
5
  require 'pindo/base/executable'
6
6
  require 'pindo/config/ios_config_parser'
7
7
  require 'pindo/config/build_info_manager'
8
- require 'pindo/base/pindocontext'
9
8
  require 'pindo/module/task/task_manager'
10
- require 'pindo/module/task/model/ipa_local_resign_task'
11
- require 'pindo/module/task/model/jps_upload_task'
9
+ require 'pindo/module/task/model/resign/ipa_local_resign_task'
10
+ require 'pindo/module/task/model/jps/jps_upload_task'
12
11
  require 'pindo/options/options'
13
12
 
14
13
  module Pindo
@@ -139,8 +138,7 @@ module Pindo
139
138
  def run
140
139
  begin
141
140
  # 加载 JPS 配置(如果存在)
142
- context = Pindo::PindoContext.instance
143
- context.load_and_apply_jps_config(Dir.pwd)
141
+ Pindo::BuildHelper.share_instance.load_jps_build_config(Dir.pwd)
144
142
 
145
143
  # 1. 查找或指定 IPA 文件
146
144
  ipa_file_path = find_ipa_file()
@@ -4,15 +4,18 @@ require 'find'
4
4
  require 'fileutils'
5
5
  require 'pindo/base/executable'
6
6
  require 'pindo/module/build/build_helper'
7
- require 'pindo/module/build/version_helper'
7
+ require 'pindo/module/build/git_repo_helper'
8
8
  require 'pindo/module/xcode/xcode_build_config'
9
9
  require 'pindo/module/xcode/xcode_build_helper'
10
- require 'pindo/base/pindocontext'
11
10
  require 'pindo/module/task/task_manager'
12
- require 'pindo/module/task/model/git_tag_task'
13
- require 'pindo/module/task/model/unity_export_task'
11
+ require 'pindo/module/task/model/git/git_commit_task'
12
+ require 'pindo/module/task/model/git/git_tag_task'
13
+ require 'pindo/module/task/model/unity/unity_update_task'
14
+ require 'pindo/module/task/model/unity/unity_yoo_asset_task'
15
+ require 'pindo/module/task/model/unity/unity_export_task'
14
16
  require 'pindo/module/task/model/build_task'
15
- require 'pindo/module/task/model/jps_upload_task'
17
+ require 'pindo/module/task/model/jps/jps_upload_task'
18
+ require 'pindo/module/task/model/jps/jps_message_task'
16
19
  require 'pindo/options/options'
17
20
  require 'pindo/options/helpers/bundleid_selector'
18
21
  require 'pindo/config/build_info_manager'
@@ -30,9 +33,7 @@ module Pindo
30
33
  def self.use_cache?
31
34
  true # 此命令启用缓存
32
35
  end
33
- # 缓存组已在 PindoContext#get_command_group 中定义
34
- # ios:autobuild 与 unity:ipa 共享 'ios:autobuild' 缓存组
35
-
36
+
36
37
  # 命令的详细说明,包含用法示例
37
38
  self.description = <<-DESC
38
39
  编译IPA,自动修改工程配置并支持上传到JPS测试平台。
@@ -72,7 +73,10 @@ module Pindo
72
73
  @option_items ||= begin
73
74
  items = Pindo::Options::OptionGroup.merge(
74
75
  Pindo::Options::BuildOptions.select(:bundleid, :build_type),
75
- Pindo::Options::JPSOptions.select(:proj, :upload, :send)
76
+ Pindo::Options::JPSOptions.select(:proj, :upload, :send),
77
+ Pindo::Options::UnityOptions.select(:skiplib, :skipyoo),
78
+ Pindo::Options::UnityOptions.select_with_defaults(skipconfig: true),
79
+ Pindo::Options::GitOptions.all
76
80
  )
77
81
 
78
82
  # 为 bundleid 参数添加 value_block(交互式选择)
@@ -91,25 +95,33 @@ module Pindo
91
95
 
92
96
  # 命令的选项列表
93
97
  def self.options
94
- # 转换为 CLAide 格式
95
- option_items.map { |item| item.to_claide_option }.concat(super)
98
+ option_items.map(&:to_claide_option).concat(super)
96
99
  end
97
100
 
98
101
  def initialize(argv)
99
102
  # 先提取 build_type(因为 bundleid 的 value_block 需要用到它)
100
103
  @build_type = argv.option('build_type', 'dev')
101
104
 
102
- # 一行代码完成参数初始化(自动推导命令名、自动启用缓存)
103
105
  @options = initialize_options(argv)
104
106
 
105
107
  # 保存参数到实例变量
106
- @build_type = @options[:build_type] || @build_type # 使用 options 中的值,如果没有则用之前提取的
108
+ @build_type = @options[:build_type] || @build_type
107
109
  @args_send_flag = @options[:send]
108
110
  # send 依赖 upload:如果指定了 send,自动启用 upload
109
111
  @args_upload_flag = @options[:send] || @options[:upload]
110
112
  @args_proj_name = @options[:proj]
111
113
  @args_bundle_id = @options[:bundleid]
112
114
 
115
+ # Unity 参数
116
+ @args_skip_lib = @options[:skiplib] || false
117
+ @args_skip_yoo = @options[:skipyoo] || false
118
+
119
+ # Git 参数
120
+ @args_release_branch = @options[:release_branch] || 'master'
121
+ @args_ver_inc = Pindo::Options::GitOptions.parse_version_increase_type(@options[:ver_inc] || 'mini')
122
+ @args_tag_type = Pindo::Options::GitOptions.parse_create_tag_type(@options[:tag_type] || 'new')
123
+ @args_tag_pre = @options[:tag_pre] || 'v'
124
+
113
125
  super
114
126
  @additional_args = argv.remainder!
115
127
  end
@@ -124,11 +136,7 @@ module Pindo
124
136
 
125
137
  begin
126
138
  # 加载 JPS 配置(如果存在)
127
- context = Pindo::PindoContext.instance
128
- context.load_and_apply_jps_config(pindo_project_dir)
129
-
130
- # 注意:参数缓存已在 initialize 中通过 GlobalOptionsState 处理
131
- # 不再使用 PindoContext 的缓存机制
139
+ Pindo::BuildHelper.share_instance.load_jps_build_config(pindo_project_dir)
132
140
 
133
141
  # 准备配置
134
142
  config = prepare_ios_config(pindo_project_dir)
@@ -166,29 +174,60 @@ module Pindo
166
174
 
167
175
  tasks = []
168
176
 
169
- # 1. Git 标签任务(所有编译场景都需要打 Tag)
170
- git_tag_task = Pindo::TaskSystem::GitTagTask.new(config[:project_path])
171
- tasks << git_tag_task
177
+ # 1. Git 提交任务
178
+ git_commit_task = Pindo::TaskSystem::GitCommitTask.new(
179
+ config[:project_path],
180
+ release_branch: @args_release_branch,
181
+ ver_inc: @args_ver_inc,
182
+ tag_type: @args_tag_type,
183
+ tag_pre: @args_tag_pre
184
+ )
185
+ tasks << git_commit_task
172
186
 
173
- # 2. Unity 导出任务(仅 Unity 工程)
187
+ # 2. Unity 任务链(仅 Unity 工程)
174
188
  if is_unity
175
189
  # 确定 iOS 导出路径
176
190
  base_ios_path = File.join(config[:project_path], "GoodPlatform", "BaseiOS")
177
191
  ios_path = File.join(config[:project_path], "GoodPlatform", "iOS")
178
192
  ios_export_path = File.exist?(base_ios_path) ? base_ios_path : ios_path
179
193
 
194
+ # 记录上一个任务,用于依赖链
195
+ last_task = git_commit_task
196
+
197
+ # 2.1 Unity 更新必备库任务(可选)
198
+ unless @args_skip_lib
199
+ unity_update_task = Pindo::TaskSystem::UnityUpdateTask.new(
200
+ project_path: config[:project_path]
201
+ )
202
+ unity_update_task.dependencies << last_task.id
203
+ tasks << unity_update_task
204
+ last_task = unity_update_task
205
+ end
206
+
207
+ # 2.2 Unity YooAsset 资源构建任务(可选,依赖上一个任务)
208
+ unless @args_skip_yoo
209
+ unity_yoo_task = Pindo::TaskSystem::UnityYooAssetTask.new(
210
+ 'ios',
211
+ project_path: config[:project_path]
212
+ )
213
+ unity_yoo_task.dependencies << last_task.id
214
+ tasks << unity_yoo_task
215
+ last_task = unity_yoo_task
216
+ end
217
+
218
+ # 2.3 Unity 导出任务(依赖上一个任务)
180
219
  unity_context = {}
181
220
  unity_context[:project_name] = @args_proj_name if @args_proj_name
182
221
 
183
- unity_task = Pindo::TaskSystem::UnityExportTask.new(
222
+ unity_export_task = Pindo::TaskSystem::UnityExportTask.new(
184
223
  'ios',
185
224
  project_path: config[:project_path],
186
225
  export_path: ios_export_path,
187
226
  deploy_mode: @build_type, # 根据 build_type 传递部署模式
188
227
  context: unity_context
189
228
  )
190
- unity_task.dependencies << git_tag_task.id
191
- tasks << unity_task
229
+ unity_export_task.dependencies << last_task.id
230
+ tasks << unity_export_task
192
231
  end
193
232
 
194
233
  # 3. 构建任务
@@ -208,7 +247,11 @@ module Pindo
208
247
  upload: @args_upload_flag,
209
248
  send: @args_send_flag,
210
249
  app_info_obj: config[:app_info_obj],
211
- workflow_info: config[:workflow_info]
250
+ workflow_info: config[:workflow_info],
251
+ # Git 版本参数
252
+ ver_inc: @args_ver_inc,
253
+ tag_type: @args_tag_type,
254
+ tag_pre: @args_tag_pre
212
255
  }
213
256
  build_options[:unity_root_path] = config[:project_path] if is_unity
214
257
 
@@ -220,21 +263,42 @@ module Pindo
220
263
  build_task.dependencies << tasks.last.id if tasks.any?
221
264
  tasks << build_task
222
265
 
223
- # 4. 上传任务(如果需要)
266
+ # 4. Git 标签任务(依赖第一个编译任务)
267
+ git_tag_task = Pindo::TaskSystem::GitTagTask.new(
268
+ config[:project_path],
269
+ release_branch: @args_release_branch,
270
+ ver_inc: @args_ver_inc,
271
+ tag_type: @args_tag_type,
272
+ tag_pre: @args_tag_pre
273
+ )
274
+ git_tag_task.dependencies << build_task.id
275
+ tasks << git_tag_task
276
+
277
+ # 5. 上传和消息发送任务(如果需要)
224
278
  if @args_upload_flag
279
+ # 4.1 创建上传任务
225
280
  upload_task = Pindo::TaskSystem::JPSUploadTask.new(
226
281
  'ipa',
227
282
  File.join(ios_project_path, 'build'),
228
283
  nil,
229
284
  app_info_obj: config[:app_info_obj],
230
285
  workflow_info: config[:workflow_info],
231
- project_name: @args_proj_name,
232
- context: {
233
- send_to_chat: @args_send_flag
234
- },
235
- dependencies: [build_task.id]
286
+ project_name: @args_proj_name
236
287
  )
288
+ upload_task.dependencies << build_task.id
237
289
  tasks << upload_task
290
+
291
+ # 4.2 创建消息发送任务(依赖上传任务)
292
+ # app_version_info 将从 upload_task 的数据参数中获取
293
+ message_task = Pindo::TaskSystem::JPSMessageTask.new(
294
+ nil, # app_version_info 为 nil,从依赖任务获取
295
+ app_info_obj: config[:app_info_obj],
296
+ project_name: @args_proj_name,
297
+ send_message_type: @args_send_flag ? 'group' : 'self',
298
+ data_dependencies: [upload_task.id] # 从 upload_task 获取数据
299
+ )
300
+ message_task.dependencies << upload_task.id # 执行顺序依赖
301
+ tasks << message_task
238
302
  end
239
303
 
240
304
  tasks
@@ -1,209 +1,31 @@
1
- require 'highline/import'
2
- require 'fileutils'
3
- require 'json'
4
- require 'xcodeproj'
5
- require 'gym'
6
- require 'pindo/module/build/build_helper'
7
- require 'pindo/module/build/git_repo_helper'
8
- require 'pindo/module/xcode/xcode_build_config'
9
- require 'pindo/module/xcode/xcode_build_helper'
10
-
11
1
  module Pindo
12
2
  class Command
13
3
  class Ios < Command
14
4
  class Build < Ios
15
5
 
16
- # 命令的简要说明 - 编译iOS工程并可选择上传到测试平台
17
- self.summary = '编译IPA,不修改工程内容,支持上传到JPS测试平台'
18
-
19
- # 启用缓存机制
20
- def self.use_cache?
21
- true # 此命令启用缓存
22
- end
23
- # 缓存组已在 PindoContext#get_command_group 中定义
24
- # ios:build 与 ios:autobuild 共享 'ios:autobuild' 缓存组
6
+ # 命令的简要说明
7
+ # TODO: 待实现
8
+ self.summary = '编译IPA,不修改工程内容,支持上传到JPS测试平台(暂未实现)'
25
9
 
26
- # 命令的详细说明,包含用法示例
27
10
  self.description = <<-DESC
28
11
  编译iOS工程并生成IPA文件,不修改工程任何配置。
29
12
 
30
- 支持功能:
31
-
32
- * 编译iOS工程
33
-
34
- * 生成IPA文件
35
-
36
- * 支持上传到JPS测试平台
37
-
38
- * 支持发送测试通知
39
-
40
- 使用示例:
41
-
42
- $ pindo ios build # 编译IPA
43
-
44
- $ pindo ios build --upload # 编译并上传到JPS
45
-
46
- $ pindo ios build --send # 编译、上传并发送通知
47
-
48
- $ pindo ios build --proj="My App" # 指定项目名称
13
+ 注意: 此命令暂未实现,请使用 pindo ios autobuild 命令。
49
14
  DESC
50
15
 
51
- self.arguments = [
52
-
53
- ]
16
+ self.arguments = []
54
17
 
55
18
  def self.options
56
- [
57
- ['--proj', '指定上传到测试平台的项目名称'],
58
- ['--upload', '上传编译后的ipa到测试平台'],
59
- ['--send', '上传成功后发送测试通知'],
60
- ].concat(super)
19
+ [].concat(super)
61
20
  end
62
21
 
63
22
  def initialize(argv)
64
-
65
- @args_upload_flag = argv.flag?('upload', false)
66
- @args_send_flag = argv.flag?('send', false)
67
- @args_proj_name = argv.option('proj')
68
-
69
- if @args_send_flag
70
- @args_upload_flag = true
71
- end
72
-
73
-
74
23
  super
75
- @additional_args = argv.remainder!
76
24
  end
77
25
 
78
26
  def run
79
- pindo_project_dir = Dir.pwd
80
-
81
- build_helper = Pindo::BuildHelper.share_instance
82
- project_type = build_helper.project_type(pindo_project_dir)
83
-
84
- args_temp = []
85
- args_temp << "--proj=#{@args_proj_name}" if @args_proj_name
86
- args_temp << "--upload" if @args_upload_flag
87
- args_temp << "--send" if @args_send_flag
88
- case project_type
89
- when :ios
90
- ios_build
91
- when :android
92
- raise Informative, "Android 工程, 请使用 pindo and build"
93
- when :unity
94
- raise Informative, "Unity 工程, 请使用 pindo unity autobuild --types=ipa"
95
- else
96
- raise Informative, "当前目录不是工程目录,不能编译"
97
- end
98
-
99
- end
100
-
101
- def ios_build
102
-
103
- pindo_project_dir = Dir.pwd
104
- build_helper = Pindo::BuildHelper.share_instance
105
- if @args_upload_flag
106
- git_repo_helper = Pindo::GitRepoHelper.share_instance
107
- is_need_add_tag, tag_action_parms = git_repo_helper.check_is_need_add_tag?(pindo_project_dir)
108
- if is_need_add_tag
109
- git_repo_helper.create_and_push_tag(
110
- project_dir: pindo_project_dir,
111
- mode: 'minor',
112
- force_retag: tag_action_parms&.include?('--retag') || false,
113
- custom_tag: nil,
114
- release_branch: 'master'
115
- )
116
- end
117
- end
118
-
119
- new_project_fullname = Dir.glob(File.join(pindo_project_dir, "/*.xcodeproj")).max_by {|f| File.mtime(f)}
120
- puts "new_project_fullname: #{new_project_fullname}"
121
- if !new_project_fullname.nil? && File.exist?(new_project_fullname)
122
- Pindo::XcodeBuildHelper.delete_libtarget_firebase_shell(pindo_project_dir)
123
- end
124
-
125
- app_info_obj = nil
126
- workflow_info = nil
127
- if @args_upload_flag
128
- proj_name = @args_proj_name
129
- # 传入 package_type 获取 workflow_info
130
- app_info_obj, workflow_info = PgyerHelper.share_instace.prepare_upload(
131
- working_directory: Dir.pwd,
132
- proj_name: proj_name,
133
- package_type: 'ipa'
134
- )
135
-
136
- # ===== 使用 workflow 配置更新项目 =====
137
- if workflow_info && workflow_info[:package_name]
138
- workflow_packname = workflow_info[:package_name]
139
- project_id = app_info_obj ? app_info_obj["id"] : nil
140
-
141
- puts "\n使用工作流配置更新 iOS 项目:"
142
- puts " Workflow Package Name: #{workflow_packname}"
143
-
144
- # 一次性更新 Display Name、Bundle ID、URL Schemes 和 JPS 快捷操作
145
- Pindo::XcodeBuildConfig.update_project_with_workflow(
146
- project_dir: pindo_project_dir,
147
- workflow_packname: workflow_packname,
148
- project_id: project_id
149
- )
150
-
151
- # 根据实际的 Bundle ID 更新 URL Schemes
152
- Pindo::XcodeBuildConfig.update_url_schemes_with_bundleid(
153
- project_dir: pindo_project_dir,
154
- package_name: workflow_packname
155
- )
156
- else
157
- raise Informative, "未获取到工作流信息"
158
- end
159
- end
160
-
161
-
162
- # 使用 XcodeBuildHelper 进行构建
163
- Dir.chdir(pindo_project_dir)
164
- ipa_file_upload = Pindo::XcodeBuildHelper.build_project(
165
- project_dir: pindo_project_dir,
166
- icloud_id: nil
167
- )
168
-
169
- if ipa_file_upload.nil?
170
- raise Informative, "构建失败:未生成 IPA 文件"
171
- end
172
-
173
- if !ipa_file_upload.nil? && !app_info_obj.nil?
174
-
175
- description = nil
176
- result_data = PgyerHelper.share_instace.start_upload(
177
- app_info_obj: app_info_obj,
178
- ipa_file_upload: ipa_file_upload,
179
- description: description,
180
- workflow_info: workflow_info
181
- )
182
- if !result_data.nil? && !result_data["data"].nil? && !result_data["data"]["id"].nil?
183
- PgyerHelper.share_instace.print_app_version_info(
184
- app_info_obj: app_info_obj,
185
- app_version_info_obj: result_data["data"]
186
- )
187
- if @args_send_flag
188
- # 始终发送给自己
189
- PgyerHelper.share_instace.send_apptest_msg(
190
- app_info_obj: app_info_obj,
191
- app_version_info_obj: result_data["data"],
192
- receiveType: "self"
193
- )
194
-
195
- # 额外发送到测试群
196
- PgyerHelper.share_instace.send_apptest_msg(
197
- app_info_obj: app_info_obj,
198
- app_version_info_obj: result_data["data"],
199
- chatEnv: "DevTest",
200
- receiveType: "chat"
201
- )
202
- end
203
- end
204
- end
205
-
206
- system "open #{pindo_project_dir}"
27
+ # TODO: 待实现
28
+ raise Informative, "pindo ios build 命令暂未实现,请使用 pindo ios autobuild"
207
29
  end
208
30
 
209
31
  end