pindo 5.13.1 → 5.13.2

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 (110) 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 +258 -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/autobuild.rb +64 -43
  24. data/lib/pindo/command/ios/autoresign.rb +34 -19
  25. data/lib/pindo/command/ios/build.rb +9 -6
  26. data/lib/pindo/command/ios/cert.rb +27 -20
  27. data/lib/pindo/command/jps/upload.rb +3 -3
  28. data/lib/pindo/command/unity/autobuild.rb +2 -2
  29. data/lib/pindo/command/utils/clearcert.rb +2 -17
  30. data/lib/pindo/command/{deploy → utils}/fabric.rb +13 -13
  31. data/lib/pindo/command/utils/renewcert.rb +62 -38
  32. data/lib/pindo/command/utils/renewproj.rb +0 -3
  33. data/lib/pindo/command/{deploy → utils}/updateconfig.rb +6 -7
  34. data/lib/pindo/command/utils.rb +2 -0
  35. data/lib/pindo/command/web/autobuild.rb +2 -2
  36. data/lib/pindo/command.rb +30 -3
  37. data/lib/pindo/config/build_info_manager.rb +176 -0
  38. data/lib/pindo/config/ios_config_parser.rb +404 -0
  39. data/lib/pindo/module/android/android_config_helper.rb +9 -5
  40. data/lib/pindo/module/appstore/bundleid_helper.rb +349 -0
  41. data/lib/pindo/module/appstore/itcapp_helper.rb +228 -0
  42. data/lib/pindo/module/build/build_helper.rb +12 -0
  43. data/lib/pindo/module/build/swark_helper.rb +116 -77
  44. data/lib/pindo/module/cert/cert_helper.rb +74 -0
  45. data/lib/pindo/module/cert/pem_helper.rb +72 -0
  46. data/lib/pindo/module/cert/{xcodecerthelper.rb → xcode_cert_helper.rb} +208 -6
  47. data/lib/pindo/module/task/model/appstore/appstore_task.rb +18 -0
  48. data/lib/pindo/module/task/model/appstore/appstore_upload_ipa_task.rb +151 -0
  49. data/lib/pindo/module/task/model/appstore/appstore_upload_metadata_task.rb +250 -0
  50. data/lib/pindo/module/task/model/appstore/appstore_upload_screenshot_task.rb +276 -0
  51. data/lib/pindo/module/task/model/build/android_build_adhoc_task.rb +210 -0
  52. data/lib/pindo/module/task/model/build/{android_dev_build_task.rb → android_build_dev_task.rb} +2 -2
  53. data/lib/pindo/module/task/model/build/android_build_gplay_task.rb +210 -0
  54. data/lib/pindo/module/task/model/build/android_build_task.rb +13 -0
  55. data/lib/pindo/module/task/model/build/ios_build_adhoc_task.rb +197 -0
  56. data/lib/pindo/module/task/model/build/ios_build_appstore_task.rb +367 -0
  57. data/lib/pindo/module/task/model/build/{ios_dev_build_task.rb → ios_build_dev_task.rb} +37 -27
  58. data/lib/pindo/module/task/model/build/ios_build_task.rb +13 -0
  59. data/lib/pindo/module/task/model/build/{web_dev_build_task.rb → web_build_dev_task.rb} +1 -1
  60. data/lib/pindo/module/task/model/build_task.rb +15 -12
  61. data/lib/pindo/module/task/model/jps_resign_task.rb +185 -0
  62. data/lib/pindo/module/task/model/{upload_task.rb → jps_upload_task.rb} +3 -3
  63. data/lib/pindo/module/task/model/unity_export_task.rb +3 -1
  64. data/lib/pindo/module/unity/unity_helper.rb +2 -1
  65. data/lib/pindo/module/xcode/ipa_resign_helper.rb +210 -0
  66. data/lib/pindo/module/xcode/{xcodeappconfig.rb → xcode_app_config.rb} +79 -0
  67. data/lib/pindo/module/xcode/xcode_build_config.rb +152 -17
  68. data/lib/pindo/module/xcode/xcode_build_helper.rb +151 -1
  69. data/lib/pindo/module/xcode/xcode_swark_helper.rb +341 -0
  70. data/lib/pindo/options/core/global_options_state.rb +268 -0
  71. data/lib/pindo/options/core/option_configuration.rb +206 -0
  72. data/lib/pindo/options/core/option_initializer.rb +51 -0
  73. data/lib/pindo/options/core/option_item.rb +144 -0
  74. data/lib/pindo/options/core/option_value_parser.rb +54 -0
  75. data/lib/pindo/options/groups/build_options.rb +60 -0
  76. data/lib/pindo/options/groups/jps_options.rb +70 -0
  77. data/lib/pindo/options/groups/option_group.rb +73 -0
  78. data/lib/pindo/options/helpers/bundleid_selector.rb +103 -0
  79. data/lib/pindo/options/options.rb +14 -0
  80. data/lib/pindo/version.rb +1 -1
  81. metadata +49 -40
  82. data/lib/pindo/command/appstore/import.rb +0 -259
  83. data/lib/pindo/command/deploy/build.rb +0 -250
  84. data/lib/pindo/command/deploy/bundleid.rb +0 -259
  85. data/lib/pindo/command/deploy/cert.rb +0 -202
  86. data/lib/pindo/command/deploy/check.rb +0 -93
  87. data/lib/pindo/command/deploy/configproj.rb +0 -120
  88. data/lib/pindo/command/deploy/confusecode.rb +0 -262
  89. data/lib/pindo/command/deploy/confuseproj.rb +0 -122
  90. data/lib/pindo/command/deploy/iap.rb +0 -826
  91. data/lib/pindo/command/deploy/initconfig.rb +0 -138
  92. data/lib/pindo/command/deploy/itcapp.rb +0 -146
  93. data/lib/pindo/command/deploy/pem.rb +0 -55
  94. data/lib/pindo/command/deploy/pullconfig.rb +0 -56
  95. data/lib/pindo/command/deploy/pushconfig.rb +0 -93
  96. data/lib/pindo/command/deploy/quswark.rb +0 -156
  97. data/lib/pindo/command/deploy/quswauth.rb +0 -76
  98. data/lib/pindo/command/deploy/reportbug.rb +0 -145
  99. data/lib/pindo/command/deploy/resign.rb +0 -300
  100. data/lib/pindo/command/deploy/tag.rb +0 -108
  101. data/lib/pindo/command/deploy/uploadipa.rb +0 -73
  102. data/lib/pindo/command/deploy.rb +0 -42
  103. data/lib/pindo/command/dev/autobuild.rb +0 -117
  104. data/lib/pindo/command/dev/build.rb +0 -94
  105. data/lib/pindo/command/dev/debug.rb +0 -112
  106. data/lib/pindo/module/task/model/build/android_release_build_task.rb +0 -29
  107. data/lib/pindo/module/task/model/build/ios_adhoc_build_task.rb +0 -53
  108. data/lib/pindo/module/task/model/build/ios_release_build_task.rb +0 -53
  109. data/lib/pindo/options/appconfigoptions.rb +0 -24
  110. data/lib/pindo/options/deployoptions.rb +0 -372
@@ -0,0 +1,367 @@
1
+ require_relative 'ios_build_task'
2
+ require 'pindo/module/build/build_helper'
3
+ require 'pindo/module/build/version_helper'
4
+ require 'pindo/module/build/git_repo_helper'
5
+ require 'pindo/module/xcode/xcode_build_config'
6
+ require 'pindo/module/xcode/xcode_build_helper'
7
+ require 'pindo/module/xcode/xcode_app_config'
8
+ require 'pindo/module/pgyer/pgyerhelper'
9
+ require 'pindo/config/ios_config_parser'
10
+
11
+ module Pindo
12
+ module TaskSystem
13
+ # iOS AppStore 模式构建任务
14
+ # 使用 Distribution/App Store 证书编译 iOS 工程
15
+ # 包含 AppStore 特有的准备工作(版本号增加、Tag 创建、Quark/Swark 处理等)
16
+ class IosBuildAppStoreTask < IosBuildTask
17
+ def initialize(options = {})
18
+ @bundle_id = options[:bundle_id]
19
+ @proj_name = options[:proj_name]
20
+ @upload_flag = options[:upload] || false
21
+ @send_flag = options[:send] || false
22
+ @macos_flag = false
23
+
24
+ # 接收外部传入的 JPS 配置
25
+ @app_info_obj = options[:app_info_obj]
26
+ @workflow_info = options[:workflow_info]
27
+
28
+ # 保存 Unity 根目录路径(用于查找 config.json)
29
+ @unity_root_path = options[:unity_root_path]
30
+
31
+ # AppStore 特有参数(可选)
32
+ @enable_appstore_prepare = options[:enable_appstore_prepare] || false
33
+
34
+ super(:ios, :release, options)
35
+ end
36
+
37
+ protected
38
+
39
+ def build_task_name
40
+ "构建 IPA (Release)"
41
+ end
42
+
43
+ #准备构建
44
+ def prepare_build
45
+ # 如果启用 AppStore 准备,执行 AppStore 特有的准备工作
46
+ if @enable_appstore_prepare
47
+ prepare_appstore_specific
48
+ end
49
+ end
50
+
51
+ def execute_build
52
+ configure_certificate
53
+ build_ios_project
54
+ end
55
+
56
+ def find_output
57
+ build_path = File.join(@project_path, "build", "*.{ipa,app}")
58
+ ipa_files = Dir.glob(build_path)
59
+
60
+ if ipa_files.any?
61
+ latest_ipa = ipa_files.max_by { |f| File.mtime(f) }
62
+ puts " 找到 IPA 文件: #{latest_ipa}"
63
+ latest_ipa
64
+ else
65
+ puts " 警告: 未找到 IPA 文件"
66
+ nil
67
+ end
68
+ end
69
+
70
+ private
71
+
72
+ # AppStore 特有的准备工作
73
+ def prepare_appstore_specific
74
+ Dir.chdir(@project_path)
75
+
76
+ # 1. 加载配置到 IosConfigParser 单例
77
+ load_ios_config
78
+
79
+ # 2. 自动增加版本号
80
+ auto_increase_buildnumber
81
+
82
+ # 3. 检查代码版本
83
+ check_code_version
84
+
85
+ # 4. 配置 Xcode 项目
86
+ configure_xcode_project
87
+
88
+ # 5. Quark/Swark 处理
89
+ handle_quswark_processing
90
+
91
+ # 6. 使用 appstore cert 命令
92
+ configure_appstore_certificate
93
+
94
+ # 7. 创建发布 tag
95
+ create_release_tag_for_appstore
96
+
97
+ # 8. Applovin 处理
98
+ handle_applovin_processing
99
+ end
100
+
101
+ # 加载 iOS 配置
102
+ def load_ios_config
103
+ # 检查 IosConfigParser 是否已经加载了配置
104
+ config_parser = Pindo::IosConfigParser.instance
105
+ if config_parser.config_json.nil?
106
+ # 如果没有加载,尝试从项目目录加载
107
+ config_file = File.join(@project_path, "config.json")
108
+ if File.exist?(config_file)
109
+ puts " 加载 iOS 配置..."
110
+ config_parser.load_config(config_file: config_file)
111
+ else
112
+ raise Informative, "配置文件不存在: #{config_file}"
113
+ end
114
+ else
115
+ puts " 使用已加载的配置..."
116
+ end
117
+ end
118
+
119
+ # 自动增加版本号
120
+ def auto_increase_buildnumber
121
+ config_parser = Pindo::IosConfigParser.instance
122
+ config_json = config_parser.config_json
123
+ return unless config_json
124
+
125
+ # 从全局配置获取 deploy_identifier
126
+ deploy_identifier = config_json.dig('project_info', 'deploy_identifier')
127
+ return unless deploy_identifier
128
+
129
+ puts " 自动增加版本号..."
130
+
131
+ # 从全局配置获取 pindo_dir
132
+ pindo_dir = File.expand_path(config_parser.pindo_dir)
133
+ app_config_repo_dir = File.join(pindo_dir, deploy_identifier)
134
+
135
+ # 增加项目目录的版本号
136
+ project_config_file = File.join(@project_path, "config.json")
137
+ if File.exist?(project_config_file)
138
+ increase_buildnumber_in_file(project_config_file)
139
+ end
140
+
141
+ # 增加配置仓库的版本号
142
+ app_config_file = File.join(app_config_repo_dir, "config.json")
143
+ if File.exist?(app_config_file)
144
+ increase_buildnumber_in_file(app_config_file)
145
+
146
+ # 提交到配置仓库
147
+ require 'pindo/module/build/git_repo_helper'
148
+ git_helper = Pindo::GitRepoHelper.share_instance
149
+ git_helper.git_addpush_repo(
150
+ path: app_config_repo_dir,
151
+ message: "increate build number",
152
+ commit_file_params: ["config.json"]
153
+ )
154
+ end
155
+ end
156
+
157
+ # 增加配置文件中的版本号
158
+ def increase_buildnumber_in_file(config_file)
159
+ config_json = JSON.parse(File.read(config_file))
160
+
161
+ if config_json["app_info"] && config_json["app_info"]["app_version"]
162
+ version_parts = config_json["app_info"]["app_version"].split(".")
163
+ if version_parts.length >= 3
164
+ build_number = version_parts[2].to_i + 1
165
+ version_parts[2] = build_number.to_s
166
+ config_json["app_info"]["app_version"] = version_parts.join(".")
167
+
168
+ File.write(config_file, JSON.pretty_generate(config_json))
169
+ puts " ✓ 版本号: #{config_json["app_info"]["app_version"]}"
170
+ end
171
+ end
172
+ end
173
+
174
+ # 检查代码版本
175
+ def check_code_version
176
+ config_parser = Pindo::IosConfigParser.instance
177
+ config_json = config_parser.config_json
178
+ return unless config_json
179
+
180
+ deploy_identifier = config_json.dig('project_info', 'deploy_identifier')
181
+ return unless deploy_identifier
182
+
183
+ puts " 检查代码版本..."
184
+
185
+ pindo_dir = File.expand_path(config_parser.pindo_dir)
186
+ app_config_dir = File.join(pindo_dir, deploy_identifier)
187
+ build_verify_file = File.join(app_config_dir, "build_verify.json")
188
+
189
+ build_verify_json = nil
190
+ begin
191
+ build_verify_json = JSON.parse(File.read(build_verify_file)) if File.exist?(build_verify_file)
192
+ rescue => error
193
+ build_verify_json = nil
194
+ end
195
+
196
+ require 'pindo/module/build/git_repo_helper'
197
+ git_helper = Pindo::GitRepoHelper.share_instance
198
+ release_code_commit = git_helper.git_latest_commit_id(local_repo_dir: @project_path)
199
+
200
+ if !release_code_commit.nil? && !build_verify_json.nil? && !build_verify_json["output_code_commit"].nil?
201
+ output_code_commit = build_verify_json["output_code_commit"]
202
+ if !release_code_commit.eql?(output_code_commit)
203
+ puts
204
+ puts " ⚠ 不是最新代码,请更新代码!"
205
+ puts " 当前 commit: #{release_code_commit}"
206
+ puts " 期望 commit: #{output_code_commit}"
207
+ puts
208
+
209
+ require 'highline/import'
210
+ answer = agree(" 请确认要用当前代码编译: (Y/n)")
211
+ unless answer
212
+ raise Informative, "请更新代码重新打包!"
213
+ end
214
+ end
215
+ end
216
+ end
217
+
218
+ # 配置 Xcode 项目
219
+ def configure_xcode_project
220
+ puts " 配置 Xcode 项目..."
221
+ Pindo::XcodeBuildConfig.configure_xcode_project(project_dir: @project_path)
222
+ end
223
+
224
+ # 处理 Quark/Swark
225
+ def handle_quswark_processing
226
+ config_parser = Pindo::IosConfigParser.instance
227
+ config_json = config_parser.config_json
228
+ return unless config_json
229
+
230
+ # 从 config_json 中判断是否需要处理 Quark/Swark
231
+ xcode_build_type = config_json.dig('project_info', 'xcode_build_type')
232
+ return unless xcode_build_type
233
+
234
+ build_type_array = xcode_build_type.split("_") || []
235
+ return unless build_type_array.include?("quark") || build_type_array.include?("swark")
236
+
237
+ puts " 处理 Quark/Swark..."
238
+
239
+ require 'pindo/module/xcode/xcode_swark_helper'
240
+ Dir.chdir(@project_path)
241
+
242
+ if xcode_build_type.include?("quark")
243
+ Pindo::XcodeSwarkHelper.quark_run(
244
+ project_dir: @project_path,
245
+ config_json: config_json,
246
+ build_type: 'release'
247
+ )
248
+ else
249
+ Pindo::XcodeSwarkHelper.swark_run(
250
+ project_dir: @project_path,
251
+ config_json: config_json,
252
+ build_type: 'release'
253
+ )
254
+ end
255
+ end
256
+
257
+ # 配置 AppStore 证书
258
+ def configure_appstore_certificate
259
+ puts " 配置 AppStore 证书..."
260
+ Dir.chdir(@project_path)
261
+
262
+ # 使用 appstore cert 命令
263
+ Pindo::Command::Appstore::Cert.run([])
264
+ end
265
+
266
+ # 创建发布 tag
267
+ def create_release_tag_for_appstore
268
+ puts " 创建发布 Tag..."
269
+
270
+ config_parser = Pindo::IosConfigParser.instance
271
+ config_json = config_parser.config_json
272
+ bundle_id = config_parser.bundle_id
273
+
274
+ tag_helper = Object.new
275
+ tag_helper.extend(Pindo::XcodeAppConfig)
276
+ tag_helper.create_release_tag(
277
+ project_dir: @project_path,
278
+ config_json: config_json,
279
+ bundle_id: bundle_id
280
+ )
281
+ end
282
+
283
+ # 处理 Applovin
284
+ def handle_applovin_processing
285
+ pod_lock_file = File.join(@project_path, "Podfile.lock")
286
+ return unless File.exist?(pod_lock_file)
287
+
288
+ begin
289
+ require 'cocoapods'
290
+ pod_lock_json = Pod::YAMLHelper.load_file(pod_lock_file)
291
+ pods_array = []
292
+
293
+ if !pod_lock_json["SPEC REPOS"].nil?
294
+ pod_lock_json["SPEC REPOS"].each do |source, pod_items|
295
+ pods_array += pod_items
296
+ end
297
+ end
298
+
299
+ if pods_array.include?("FancyAD") || pods_array.include?("AppLovinSDK")
300
+ puts
301
+ puts " 运行 Applovin Script..."
302
+ Dir.chdir(@project_path)
303
+
304
+ applovin_args = []
305
+ applovin_args << "--appstore"
306
+ applovin_args << "--install"
307
+ Pindo::Command::Ios::Applovin.run(applovin_args)
308
+ end
309
+ rescue => e
310
+ puts " ⚠ Applovin 处理失败: #{e.message}"
311
+ end
312
+ end
313
+
314
+ # 检测是否为 macOS 平台
315
+ def detect_macos_platform
316
+ project_fullname = Dir.glob(File.join(@project_path, "/*.xcodeproj")).max_by { |f| File.mtime(f) }
317
+ return if project_fullname.nil?
318
+
319
+ require 'xcodeproj'
320
+ project_obj = Xcodeproj::Project.open(project_fullname)
321
+ project_build_platform = project_obj.root_object.build_configuration_list.get_setting("SDKROOT")["Release"]
322
+
323
+ if !project_build_platform.nil? && project_build_platform.eql?("macosx")
324
+ @macos_flag = true
325
+ end
326
+ end
327
+
328
+ # 配置证书
329
+ def configure_certificate
330
+ detect_macos_platform
331
+
332
+ # 如果启用了 AppStore 准备,证书配置在 configure_appstore_certificate 中完成
333
+ if @enable_appstore_prepare
334
+ # 证书已在 configure_appstore_certificate 中配置
335
+ return
336
+ end
337
+
338
+ # 使用新的证书安装方法
339
+ # config.json 已经通过 pull_config 方法拉取到 @project_path 目录
340
+ require 'pindo/module/cert/xcode_cert_helper'
341
+ Pindo::XcodeCertHelper.install_and_config_certs(
342
+ build_type: 'release',
343
+ platform_type: @macos_flag ? 'macos' : 'ios',
344
+ project_dir: @project_path
345
+ )
346
+ end
347
+
348
+ # 编译 iOS 工程
349
+ def build_ios_project
350
+ Dir.chdir(@project_path)
351
+
352
+ # 使用 XcodeBuildHelper 进行构建
353
+ ipa_file = Pindo::XcodeBuildHelper.build_project(
354
+ project_dir: @project_path,
355
+ icloud_id: nil
356
+ )
357
+
358
+ if ipa_file.nil?
359
+ raise Informative, "构建失败:未生成 IPA 文件"
360
+ end
361
+
362
+ puts "构建成功:#{ipa_file}"
363
+ ipa_file
364
+ end
365
+ end
366
+ end
367
+ end
@@ -1,4 +1,4 @@
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'
@@ -10,7 +10,7 @@ module Pindo
10
10
  module TaskSystem
11
11
  # iOS Dev 模式构建任务
12
12
  # 使用 Development 证书编译 iOS 工程
13
- class IosDevBuildTask < BuildTask
13
+ class IosBuildDevTask < IosBuildTask
14
14
  def initialize(options = {})
15
15
  @bundle_id = options[:bundle_id]
16
16
  @proj_name = options[:proj_name]
@@ -148,17 +148,27 @@ module Pindo
148
148
 
149
149
  # 拉取配置
150
150
  def pull_config
151
- args_temp = []
152
- args_temp << @bundle_id if @bundle_id
153
- Pindo::Command::Deploy::Pullconfig::run(args_temp)
151
+ return unless @bundle_id
152
+
153
+ build_helper = Pindo::BuildHelper.share_instance
154
+ build_helper.pull_appconfig_with_reponame(
155
+ repo_name: @bundle_id,
156
+ target_dir: @project_path
157
+ )
158
+
159
+ # 重新加载配置到 IosConfigParser
160
+ config_file = File.join(@project_path, "config.json")
161
+ if File.exist?(config_file)
162
+ Pindo::IosConfigParser.instance.load_config(config_file: config_file)
163
+ else
164
+ raise Informative, "配置文件不存在: #{config_file}"
165
+ end
154
166
  end
155
167
 
156
168
  # 更新 Entitlements
157
169
  def update_entitlements
158
- config_json_file = File.join(@project_path, "config.json")
159
170
  Pindo::XcodeBuildConfig.update_entitlements_config(
160
- project_dir: @project_path,
161
- config_file: config_json_file
171
+ project_dir: @project_path
162
172
  )
163
173
  end
164
174
 
@@ -196,22 +206,14 @@ module Pindo
196
206
  # 检查是否是 macOS 工程
197
207
  detect_macos_platform
198
208
 
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
209
+ # 使用新的证书安装方法
210
+ # config.json 已经通过 pull_config 方法拉取到 @project_path 目录
211
+ require 'pindo/module/cert/xcode_cert_helper'
212
+ Pindo::XcodeCertHelper.install_and_config_certs(
213
+ build_type: 'dev',
214
+ platform_type: @macos_flag ? 'macos' : 'ios',
215
+ project_dir: @project_path
216
+ )
215
217
  end
216
218
 
217
219
  # 检测是否为 macOS 平台
@@ -241,10 +243,18 @@ module Pindo
241
243
  def build_ios_project
242
244
  Dir.chdir(@project_path)
243
245
 
244
- args_temp = ['--dev']
245
- args_temp << '--macos' if @macos_flag
246
+ # 使用 XcodeBuildHelper 进行构建
247
+ ipa_file = Pindo::XcodeBuildHelper.build_project(
248
+ project_dir: @project_path,
249
+ icloud_id: nil
250
+ )
251
+
252
+ if ipa_file.nil?
253
+ raise Informative, "构建失败:未生成 IPA 文件"
254
+ end
246
255
 
247
- Pindo::Command::Deploy::Build::run(args_temp)
256
+ puts "构建成功:#{ipa_file}"
257
+ ipa_file
248
258
  end
249
259
  end
250
260
  end
@@ -0,0 +1,13 @@
1
+ require_relative '../build_task'
2
+
3
+ module Pindo
4
+ module TaskSystem
5
+ # iOS 构建任务基类
6
+ # 所有 iOS 平台构建任务的抽象基类
7
+ # 子类包括:IosBuildDevTask、IosBuildAdhocTask、IosBuildAppStoreTask
8
+ class IosBuildTask < BuildTask
9
+ # 空基类,仅用于类型标识
10
+ # 所有具体实现由子类完成
11
+ end
12
+ end
13
+ 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