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
@@ -9,12 +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
14
  require 'pindo/module/task/model/unity/unity_config_task'
14
15
  require 'pindo/module/task/model/unity/unity_update_task'
15
16
  require 'pindo/module/task/model/unity/unity_yoo_asset_task'
16
17
  require 'pindo/module/task/model/unity/unity_export_task'
17
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'
18
21
  require 'pindo/options/options'
19
22
 
20
23
  module Pindo
@@ -61,17 +64,17 @@ module Pindo
61
64
 
62
65
  # 定义此命令使用的参数项
63
66
  def self.option_items
64
- @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
+ )
65
73
  end
66
74
 
67
75
  # 命令的选项列表
68
76
  def self.options
69
- # 转换为 CLAide 格式
70
- option_items.map { |item| item.to_claide_option }.concat([
71
- ['--skipconfig', '跳过Unity编译模式配置(加快构建速度)'],
72
- ['--skiplib', '跳过Unity必备库更新(加快构建速度)'],
73
- ['--skipyoo', '跳过YooAsset资源打包(加快构建速度)']
74
- ]).concat(super)
77
+ option_items.map(&:to_claide_option).concat(super)
75
78
  end
76
79
 
77
80
  def initialize(argv)
@@ -88,6 +91,11 @@ module Pindo
88
91
  @args_skip_lib = argv.flag?('skiplib', false)
89
92
  @args_skip_yoo = argv.flag?('skipyoo', false)
90
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_'
98
+
91
99
  super(argv)
92
100
  end
93
101
 
@@ -176,6 +184,18 @@ module Pindo
176
184
 
177
185
  tasks = []
178
186
 
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
+
179
199
  # 1. Unity 任务链(仅 Unity 工程)
180
200
  if is_unity
181
201
  # 确定 iOS 导出路径
@@ -183,15 +203,13 @@ module Pindo
183
203
  ios_path = File.join(project_path, "GoodPlatform", "iOS")
184
204
  ios_export_path = File.exist?(base_ios_path) ? base_ios_path : ios_path
185
205
 
186
- # 记录上一个任务,用于依赖链
187
- last_task = nil
188
-
189
206
  # 1.1 Unity 配置编译模式任务(可选)
190
207
  unless @args_skip_config
191
208
  unity_config_task = Pindo::TaskSystem::UnityConfigTask.new(
192
209
  'release', # AppStore 使用 release 模式
193
210
  project_path: project_path
194
211
  )
212
+ unity_config_task.dependencies << last_task.id
195
213
  tasks << unity_config_task
196
214
  last_task = unity_config_task
197
215
  end
@@ -201,7 +219,7 @@ module Pindo
201
219
  unity_update_task = Pindo::TaskSystem::UnityUpdateTask.new(
202
220
  project_path: project_path
203
221
  )
204
- unity_update_task.dependencies << last_task.id if last_task
222
+ unity_update_task.dependencies << last_task.id
205
223
  tasks << unity_update_task
206
224
  last_task = unity_update_task
207
225
  end
@@ -212,7 +230,7 @@ module Pindo
212
230
  'ios',
213
231
  project_path: project_path
214
232
  )
215
- unity_yoo_task.dependencies << last_task.id if last_task
233
+ unity_yoo_task.dependencies << last_task.id
216
234
  tasks << unity_yoo_task
217
235
  last_task = unity_yoo_task
218
236
  end
@@ -224,8 +242,9 @@ module Pindo
224
242
  export_path: ios_export_path,
225
243
  deploy_mode: 'release' # AppStore 使用 release 模式
226
244
  )
227
- unity_export_task.dependencies << last_task.id if last_task
245
+ unity_export_task.dependencies << last_task.id
228
246
  tasks << unity_export_task
247
+ last_task = unity_export_task
229
248
  end
230
249
 
231
250
  # 2. 构建任务
@@ -248,9 +267,40 @@ module Pindo
248
267
  mode: :release,
249
268
  options: build_options
250
269
  )
251
- build_task.dependencies << tasks.last.id if tasks.any?
270
+ build_task.dependencies << last_task.id
252
271
  tasks << build_task
253
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
+
254
304
  tasks
255
305
  else
256
306
  raise Informative, "当前目录不是工程目录,不能编译"
@@ -5,7 +5,6 @@ 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
9
  require 'pindo/module/task/model/resign/ipa_local_resign_task'
11
10
  require 'pindo/module/task/model/jps/jps_upload_task'
@@ -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,17 +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'
11
+ require 'pindo/module/task/model/git/git_commit_task'
12
+ require 'pindo/module/task/model/git/git_tag_task'
13
13
  require 'pindo/module/task/model/unity/unity_update_task'
14
14
  require 'pindo/module/task/model/unity/unity_yoo_asset_task'
15
15
  require 'pindo/module/task/model/unity/unity_export_task'
16
16
  require 'pindo/module/task/model/build_task'
17
17
  require 'pindo/module/task/model/jps/jps_upload_task'
18
+ require 'pindo/module/task/model/jps/jps_message_task'
18
19
  require 'pindo/options/options'
19
20
  require 'pindo/options/helpers/bundleid_selector'
20
21
  require 'pindo/config/build_info_manager'
@@ -32,9 +33,7 @@ module Pindo
32
33
  def self.use_cache?
33
34
  true # 此命令启用缓存
34
35
  end
35
- # 缓存组已在 PindoContext#get_command_group 中定义
36
- # ios:autobuild 与 unity:ipa 共享 'ios:autobuild' 缓存组
37
-
36
+
38
37
  # 命令的详细说明,包含用法示例
39
38
  self.description = <<-DESC
40
39
  编译IPA,自动修改工程配置并支持上传到JPS测试平台。
@@ -74,7 +73,10 @@ module Pindo
74
73
  @option_items ||= begin
75
74
  items = Pindo::Options::OptionGroup.merge(
76
75
  Pindo::Options::BuildOptions.select(:bundleid, :build_type),
77
- 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
78
80
  )
79
81
 
80
82
  # 为 bundleid 参数添加 value_block(交互式选择)
@@ -93,43 +95,32 @@ module Pindo
93
95
 
94
96
  # 命令的选项列表
95
97
  def self.options
96
- # 转换为 CLAide 格式
97
- option_items.map { |item| item.to_claide_option }.concat([
98
- ['--skiplib', '跳过Unity必备库更新(加快构建速度)'],
99
- ['--skipyoo', '跳过YooAsset资源打包(加快构建速度)']
100
- ]).concat(super)
98
+ option_items.map(&:to_claide_option).concat(super)
101
99
  end
102
100
 
103
101
  def initialize(argv)
104
- # 检测是否是 help 请求(避免在 help 模式下执行交互式选择)
105
- # 注意:不能使用 argv.flag?,因为会消费参数,导致父类获取不到
106
- is_help = ARGV.include?('--help') || ARGV.include?('-h')
107
-
108
102
  # 先提取 build_type(因为 bundleid 的 value_block 需要用到它)
109
103
  @build_type = argv.option('build_type', 'dev')
110
104
 
111
- # 只有在非 help 模式下才初始化参数(避免触发交互式选择)
112
- if is_help
113
- @options = {}
114
- @args_send_flag = false
115
- @args_upload_flag = false
116
- @args_proj_name = nil
117
- @args_bundle_id = nil
118
- else
119
- # 一行代码完成参数初始化(自动推导命令名、自动启用缓存)
120
- @options = initialize_options(argv)
121
-
122
- # 保存参数到实例变量
123
- @build_type = @options[:build_type] || @build_type # 使用 options 中的值,如果没有则用之前提取的
124
- @args_send_flag = @options[:send]
125
- # send 依赖 upload:如果指定了 send,自动启用 upload
126
- @args_upload_flag = @options[:send] || @options[:upload]
127
- @args_proj_name = @options[:proj]
128
- @args_bundle_id = @options[:bundleid]
129
- end
105
+ @options = initialize_options(argv)
106
+
107
+ # 保存参数到实例变量
108
+ @build_type = @options[:build_type] || @build_type
109
+ @args_send_flag = @options[:send]
110
+ # send 依赖 upload:如果指定了 send,自动启用 upload
111
+ @args_upload_flag = @options[:send] || @options[:upload]
112
+ @args_proj_name = @options[:proj]
113
+ @args_bundle_id = @options[:bundleid]
130
114
 
131
- @args_skip_lib = argv.flag?('skiplib', false)
132
- @args_skip_yoo = argv.flag?('skipyoo', false)
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'
133
124
 
134
125
  super
135
126
  @additional_args = argv.remainder!
@@ -145,11 +136,7 @@ module Pindo
145
136
 
146
137
  begin
147
138
  # 加载 JPS 配置(如果存在)
148
- context = Pindo::PindoContext.instance
149
- context.load_and_apply_jps_config(pindo_project_dir)
150
-
151
- # 注意:参数缓存已在 initialize 中通过 GlobalOptionsState 处理
152
- # 不再使用 PindoContext 的缓存机制
139
+ Pindo::BuildHelper.share_instance.load_jps_build_config(pindo_project_dir)
153
140
 
154
141
  # 准备配置
155
142
  config = prepare_ios_config(pindo_project_dir)
@@ -187,9 +174,15 @@ module Pindo
187
174
 
188
175
  tasks = []
189
176
 
190
- # 1. Git 标签任务(所有编译场景都需要打 Tag)
191
- git_tag_task = Pindo::TaskSystem::GitTagTask.new(config[:project_path])
192
- 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
193
186
 
194
187
  # 2. Unity 任务链(仅 Unity 工程)
195
188
  if is_unity
@@ -199,7 +192,7 @@ module Pindo
199
192
  ios_export_path = File.exist?(base_ios_path) ? base_ios_path : ios_path
200
193
 
201
194
  # 记录上一个任务,用于依赖链
202
- last_task = git_tag_task
195
+ last_task = git_commit_task
203
196
 
204
197
  # 2.1 Unity 更新必备库任务(可选)
205
198
  unless @args_skip_lib
@@ -254,7 +247,11 @@ module Pindo
254
247
  upload: @args_upload_flag,
255
248
  send: @args_send_flag,
256
249
  app_info_obj: config[:app_info_obj],
257
- 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
258
255
  }
259
256
  build_options[:unity_root_path] = config[:project_path] if is_unity
260
257
 
@@ -266,21 +263,42 @@ module Pindo
266
263
  build_task.dependencies << tasks.last.id if tasks.any?
267
264
  tasks << build_task
268
265
 
269
- # 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. 上传和消息发送任务(如果需要)
270
278
  if @args_upload_flag
279
+ # 4.1 创建上传任务
271
280
  upload_task = Pindo::TaskSystem::JPSUploadTask.new(
272
281
  'ipa',
273
282
  File.join(ios_project_path, 'build'),
274
283
  nil,
275
284
  app_info_obj: config[:app_info_obj],
276
285
  workflow_info: config[:workflow_info],
277
- project_name: @args_proj_name,
278
- context: {
279
- send_to_chat: @args_send_flag
280
- },
281
- dependencies: [build_task.id]
286
+ project_name: @args_proj_name
282
287
  )
288
+ upload_task.dependencies << build_task.id
283
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
284
302
  end
285
303
 
286
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