pindo 5.13.1 → 5.13.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (115) hide show
  1. checksums.yaml +4 -4
  2. data/lib/pindo/base/git_handler.rb +692 -0
  3. data/lib/pindo/command/android/autobuild.rb +2 -2
  4. data/lib/pindo/command/appstore/adhocbuild.rb +256 -311
  5. data/lib/pindo/command/appstore/autobuild.rb +203 -0
  6. data/lib/pindo/command/appstore/autoresign.rb +35 -17
  7. data/lib/pindo/command/appstore/bundleid.rb +120 -0
  8. data/lib/pindo/command/appstore/cert.rb +212 -0
  9. data/lib/pindo/command/appstore/configproj.rb +81 -0
  10. data/lib/pindo/command/{deploy → appstore}/getitcinfo.rb +76 -91
  11. data/lib/pindo/command/appstore/iap.rb +788 -24
  12. data/lib/pindo/command/appstore/initconfig.rb +105 -0
  13. data/lib/pindo/command/appstore/itcapp.rb +95 -13
  14. data/lib/pindo/command/{deploy → appstore}/itcinfo.rb +90 -118
  15. data/lib/pindo/command/appstore/pem.rb +136 -0
  16. data/lib/pindo/command/appstore/pullconfig.rb +99 -0
  17. data/lib/pindo/command/appstore/quswark.rb +87 -0
  18. data/lib/pindo/command/appstore/quswauth.rb +67 -0
  19. data/lib/pindo/command/appstore/tag.rb +77 -0
  20. data/lib/pindo/command/appstore.rb +13 -1
  21. data/lib/pindo/command/env/quarkenv.rb +11 -13
  22. data/lib/pindo/command/env/swarkenv.rb +11 -16
  23. data/lib/pindo/command/ios/applovin.rb +24 -182
  24. data/lib/pindo/command/ios/autobuild.rb +64 -43
  25. data/lib/pindo/command/ios/autoresign.rb +34 -19
  26. data/lib/pindo/command/ios/build.rb +9 -6
  27. data/lib/pindo/command/ios/cert.rb +27 -20
  28. data/lib/pindo/command/ios/podupdate.rb +6 -37
  29. data/lib/pindo/command/jps/upload.rb +3 -3
  30. data/lib/pindo/command/unity/autobuild.rb +2 -2
  31. data/lib/pindo/command/utils/clearcert.rb +2 -17
  32. data/lib/pindo/command/{deploy → utils}/fabric.rb +13 -13
  33. data/lib/pindo/command/utils/renewcert.rb +62 -38
  34. data/lib/pindo/command/utils/renewproj.rb +0 -3
  35. data/lib/pindo/command/{deploy → utils}/updateconfig.rb +6 -7
  36. data/lib/pindo/command/utils.rb +2 -0
  37. data/lib/pindo/command/web/autobuild.rb +2 -2
  38. data/lib/pindo/command.rb +30 -3
  39. data/lib/pindo/config/build_info_manager.rb +176 -0
  40. data/lib/pindo/config/ios_config_parser.rb +404 -0
  41. data/lib/pindo/module/android/android_config_helper.rb +9 -5
  42. data/lib/pindo/module/appstore/bundleid_helper.rb +349 -0
  43. data/lib/pindo/module/appstore/itcapp_helper.rb +228 -0
  44. data/lib/pindo/module/build/build_helper.rb +12 -0
  45. data/lib/pindo/module/build/swark_helper.rb +116 -77
  46. data/lib/pindo/module/cert/cert_helper.rb +74 -0
  47. data/lib/pindo/module/cert/pem_helper.rb +72 -0
  48. data/lib/pindo/module/cert/{xcodecerthelper.rb → xcode_cert_helper.rb} +211 -6
  49. data/lib/pindo/module/pgyer/pgyerhelper.rb +13 -5
  50. data/lib/pindo/module/task/model/appstore/appstore_task.rb +18 -0
  51. data/lib/pindo/module/task/model/appstore/appstore_upload_ipa_task.rb +151 -0
  52. data/lib/pindo/module/task/model/appstore/appstore_upload_metadata_task.rb +250 -0
  53. data/lib/pindo/module/task/model/appstore/appstore_upload_screenshot_task.rb +276 -0
  54. data/lib/pindo/module/task/model/build/android_build_adhoc_task.rb +210 -0
  55. data/lib/pindo/module/task/model/build/{android_dev_build_task.rb → android_build_dev_task.rb} +2 -2
  56. data/lib/pindo/module/task/model/build/android_build_gplay_task.rb +210 -0
  57. data/lib/pindo/module/task/model/build/android_build_task.rb +13 -0
  58. data/lib/pindo/module/task/model/build/ios_build_adhoc_task.rb +342 -0
  59. data/lib/pindo/module/task/model/build/ios_build_appstore_task.rb +341 -0
  60. data/lib/pindo/module/task/model/build/{ios_dev_build_task.rb → ios_build_dev_task.rb} +40 -59
  61. data/lib/pindo/module/task/model/build/ios_build_task.rb +23 -0
  62. data/lib/pindo/module/task/model/build/{web_dev_build_task.rb → web_build_dev_task.rb} +1 -1
  63. data/lib/pindo/module/task/model/build_task.rb +15 -12
  64. data/lib/pindo/module/task/model/jps_resign_task.rb +185 -0
  65. data/lib/pindo/module/task/model/{upload_task.rb → jps_upload_task.rb} +3 -3
  66. data/lib/pindo/module/task/model/unity_export_task.rb +3 -1
  67. data/lib/pindo/module/unity/unity_helper.rb +2 -1
  68. data/lib/pindo/module/xcode/applovin_xcode_helper.rb +271 -0
  69. data/lib/pindo/module/xcode/cocoapods_helper.rb +153 -0
  70. data/lib/pindo/module/xcode/ipa_resign_helper.rb +210 -0
  71. data/lib/pindo/module/xcode/{xcodeappconfig.rb → xcode_app_config.rb} +79 -0
  72. data/lib/pindo/module/xcode/xcode_build_config.rb +152 -17
  73. data/lib/pindo/module/xcode/xcode_build_helper.rb +151 -1
  74. data/lib/pindo/module/xcode/xcode_swark_helper.rb +341 -0
  75. data/lib/pindo/options/core/global_options_state.rb +268 -0
  76. data/lib/pindo/options/core/option_configuration.rb +206 -0
  77. data/lib/pindo/options/core/option_initializer.rb +51 -0
  78. data/lib/pindo/options/core/option_item.rb +144 -0
  79. data/lib/pindo/options/core/option_value_parser.rb +54 -0
  80. data/lib/pindo/options/groups/build_options.rb +60 -0
  81. data/lib/pindo/options/groups/jps_options.rb +70 -0
  82. data/lib/pindo/options/groups/option_group.rb +73 -0
  83. data/lib/pindo/options/helpers/bundleid_selector.rb +103 -0
  84. data/lib/pindo/options/options.rb +14 -0
  85. data/lib/pindo/version.rb +1 -1
  86. metadata +51 -40
  87. data/lib/pindo/command/appstore/import.rb +0 -259
  88. data/lib/pindo/command/deploy/build.rb +0 -250
  89. data/lib/pindo/command/deploy/bundleid.rb +0 -259
  90. data/lib/pindo/command/deploy/cert.rb +0 -202
  91. data/lib/pindo/command/deploy/check.rb +0 -93
  92. data/lib/pindo/command/deploy/configproj.rb +0 -120
  93. data/lib/pindo/command/deploy/confusecode.rb +0 -262
  94. data/lib/pindo/command/deploy/confuseproj.rb +0 -122
  95. data/lib/pindo/command/deploy/iap.rb +0 -826
  96. data/lib/pindo/command/deploy/initconfig.rb +0 -138
  97. data/lib/pindo/command/deploy/itcapp.rb +0 -146
  98. data/lib/pindo/command/deploy/pem.rb +0 -55
  99. data/lib/pindo/command/deploy/pullconfig.rb +0 -56
  100. data/lib/pindo/command/deploy/pushconfig.rb +0 -93
  101. data/lib/pindo/command/deploy/quswark.rb +0 -156
  102. data/lib/pindo/command/deploy/quswauth.rb +0 -76
  103. data/lib/pindo/command/deploy/reportbug.rb +0 -145
  104. data/lib/pindo/command/deploy/resign.rb +0 -300
  105. data/lib/pindo/command/deploy/tag.rb +0 -108
  106. data/lib/pindo/command/deploy/uploadipa.rb +0 -73
  107. data/lib/pindo/command/deploy.rb +0 -42
  108. data/lib/pindo/command/dev/autobuild.rb +0 -117
  109. data/lib/pindo/command/dev/build.rb +0 -94
  110. data/lib/pindo/command/dev/debug.rb +0 -112
  111. data/lib/pindo/module/task/model/build/android_release_build_task.rb +0 -29
  112. data/lib/pindo/module/task/model/build/ios_adhoc_build_task.rb +0 -53
  113. data/lib/pindo/module/task/model/build/ios_release_build_task.rb +0 -53
  114. data/lib/pindo/options/appconfigoptions.rb +0 -24
  115. data/lib/pindo/options/deployoptions.rb +0 -372
@@ -5,39 +5,40 @@ require 'fileutils'
5
5
  require 'json'
6
6
  require 'faraday'
7
7
  require 'xcodeproj'
8
+ require 'pindo/module/xcode/applovin_xcode_helper'
8
9
 
9
10
  module Pindo
10
11
  class Command
11
12
  class Ios < Command
12
13
  class Applovin < Ios
13
-
14
+
14
15
  self.summary = '接入applovin max广告平台时更新Xcode中info.plist'
15
-
16
+
16
17
  self.description = <<-DESC
17
18
  接入applovin max广告平台时更新Xcode中info.plist。
18
-
19
+
19
20
  支持功能:
20
-
21
+
21
22
  * 自动获取applovin广告平台的SKAdNetwork IDs
22
-
23
+
23
24
  * 更新Xcode工程中的info.plist文件
24
-
25
+
25
26
  * 支持保存SKAdNetwork IDs到本地配置
26
-
27
+
27
28
  使用示例:
28
-
29
+
29
30
  $ pindo ios applovin # 更新当前目录下工程的info.plist
30
-
31
+
31
32
  $ pindo ios applovin --appstore # 使用AppStore模式更新
32
-
33
+
33
34
  $ pindo ios applovin --install # 运行applovin安装脚本
34
-
35
+
35
36
  $ pindo ios applovin --upload # 保存SKAdNetwork IDs到本地
36
37
  DESC
37
-
38
+
38
39
  self.arguments = [
39
40
  ]
40
-
41
+
41
42
  def self.options
42
43
  [
43
44
  ['--appstore', 'AppStore模式,一般不使用'],
@@ -45,7 +46,7 @@ module Pindo
45
46
  ['--upload', '保存SKAdNetwork IDs到本地配置'],
46
47
  ].concat(super)
47
48
  end
48
-
49
+
49
50
  def initialize(argv)
50
51
 
51
52
  @args_appstore_flag = argv.flag?('appstore', false)
@@ -55,178 +56,19 @@ module Pindo
55
56
  super(argv)
56
57
  @additional_args = argv.remainder!
57
58
  end
58
-
59
+
59
60
  def validate!
60
61
  super
61
62
  end
62
-
63
- def run
64
-
65
- skadnetwork_id_array = []
66
-
67
- Funlog.instance.fancyinfo_start("正在请求applovin数据...")
68
-
69
- applovin_res_json = req_applovin_json
70
- # puts JSON.pretty_generate(applovin_res_json)
71
-
72
- if !applovin_res_json.nil? && !applovin_res_json["skadnetwork_ids"].nil?
73
- applovin_res_json["skadnetwork_ids"].each do |network_id|
74
- skadnetwork_id_array << network_id["skadnetwork_id"]
75
- end
76
- end
77
-
78
- applovin_media_res_json = req_applovin_mediia_json
79
- # puts JSON.pretty_generate(applovin_media_res_json)
80
- if !applovin_media_res_json.nil? && !applovin_media_res_json["mediationSKAdnetworkIdsSpecs"].nil?
81
- applovin_media_res_json["mediationSKAdnetworkIdsSpecs"].each do |media_item|
82
- skadnetwork_id_array = skadnetwork_id_array + media_item["skAdnetworkIds"]
83
- end
84
- end
85
-
86
- skadnetwork_id_array = skadnetwork_id_array.uniq || []
87
-
88
- Funlog.instance.fancyinfo_success("请求applovin数据,获取到#{skadnetwork_id_array.size}条数据...")
89
-
90
- if !skadnetwork_id_array.nil? && skadnetwork_id_array.size > 50
91
- # puts "From Applovin SKAdNetworkItems Size: #{skadnetwork_id_array.size}"
92
- if @args_upload_flag
93
- applovin_config_file = File.join(pindo_single_config.pindo_common_configdir,"applovin_client_config.json")
94
- origin_json = {}
95
- if File.exist?(applovin_config_file)
96
- origin_json = JSON.parse(File.read(applovin_config_file))
97
- end
98
- origin_json["SKAdNetworkItems"] = skadnetwork_id_array
99
- File.write(applovin_config_file, JSON.pretty_generate(origin_json))
100
- git_addpush_repo(path:pindo_single_config.pindo_common_configdir, message:"Applovin SKAdNetworkItems", commit_file_params:["applovin_client_config.json"])
101
- end
102
- else
103
- Funlog.instance.fancyinfo_start("网络拉取applovin数据太少,从缓存中获取数据...")
104
- config_file = File.join(File::expand_path(Pindoconfig.instance.pindo_common_configdir), "applovin_client_config.json")
105
- config_json = JSON.parse(File.read(config_file))
106
- skadnetwork_id_array = skadnetwork_id_array + config_json["SKAdNetworkItems"]
107
- # puts "From Config SKAdNetworkItems Size: #{skadnetwork_id_array.size}"
108
- Funlog.instance.fancyinfo_success("网络拉取applovin数据太少,从缓存中获取到#{skadnetwork_id_array.size}条数据...")
109
- end
110
-
111
-
112
- Funlog.instance.fancyinfo_start("正在写入Xcode中...")
113
-
114
- skadnetwork_id_array = skadnetwork_id_array.uniq || []
115
-
116
- project_root_dir = Dir.pwd
117
- xcodeproj_file_name = Dir.glob(File.join(project_root_dir, "/*.xcodeproj")).max_by {|f| File.mtime(f)}
118
-
119
- plist_file_name = File.join(project_root_dir, "AppEntry/Info.plist")
120
- if !xcodeproj_file_name.nil?
121
- proj_name = File.basename(xcodeproj_file_name, ".xcodeproj")
122
- plist_file_name = get_applovin_infoplist(project_dir:project_root_dir, proj_name:proj_name)
123
- end
124
-
125
-
126
- info_plist_dict = {}
127
- if File.exist?(plist_file_name)
128
- info_plist_dict = Xcodeproj::Plist.read_from_path(plist_file_name)
129
- end
130
-
131
-
132
- info_plist_dict["NSAdvertisingAttributionReportEndpoint"] = info_plist_dict["NSAdvertisingAttributionReportEndpoint"] || "https://postbacks-app.com"
133
-
134
- if !info_plist_dict.has_key?("NSAppTransportSecurity")
135
- info_plist_dict["NSAppTransportSecurity"] = {}
136
- info_plist_dict["NSAppTransportSecurity"]["NSAllowsArbitraryLoads"] = true
137
- end
138
-
139
-
140
- if !skadnetwork_id_array.nil? && skadnetwork_id_array.size > 0
141
- info_plist_dict["SKAdNetworkItems"] = []
142
- skadnetwork_id_array.each do |network_id|
143
- item = {}
144
- item["SKAdNetworkIdentifier"] = network_id
145
- info_plist_dict["SKAdNetworkItems"] << item
146
- end
147
- end
148
-
149
- Xcodeproj::Plist.write_to_path(info_plist_dict, plist_file_name)
150
-
151
- Funlog.instance.fancyinfo_success("Xcode中applovin数据修改完成!")
152
-
153
- if @args_install_flag && !xcodeproj_file_name.nil? && File.exist?(xcodeproj_file_name)
154
-
155
- pindo_common_dir = pindo_single_config.pindo_common_configdir
156
-
157
- app_lovin_script = File.join(pindo_common_dir, "AppLovinQualityServiceSetup-ios-dev.rb")
158
- if @args_appstore_flag
159
- app_lovin_script = File.join(pindo_common_dir, "AppLovinQualityServiceSetup-ios.rb")
160
- end
161
-
162
- project_script_file = File.join(project_root_dir, "AppLovinQualityServiceSetup-ios.rb")
163
- FileUtils.cp_r(app_lovin_script, project_script_file)
164
- command = "ruby " + project_script_file
165
- # puts command
166
- system command
167
- end
168
-
169
-
170
- end
171
-
172
-
173
- def get_applovin_infoplist(project_dir:nil, proj_name:nil)
174
-
175
- info_plist_path = File.join(project_dir, "AppEntry/Info.plist")
176
- proj_fullname = File.join(project_dir, proj_name) + ".xcodeproj"
177
- if File.exist?(proj_fullname)
178
- project_obj = Xcodeproj::Project.open(proj_fullname)
179
- project_obj.targets.each do |target|
180
63
 
181
- if target.product_type.to_s.eql?("com.apple.product-type.application") then
182
- temp_info = target.build_configurations.first.build_settings['INFOPLIST_FILE']
183
- info_plist_path = File.join(project_dir, temp_info)
184
- end
185
- end
186
- end
187
-
188
- return info_plist_path
189
- end
190
-
191
-
192
- def req_applovin_json
193
-
194
- begin
195
- # https://dash.applovin.com/docs/v1/skadnetwork_ids.json
196
- applovin_url = "https://dash.applovin.com/docs/v1/skadnetwork_ids.json"
197
- con = Faraday.new
198
- res = con.get do |req|
199
- req.url applovin_url
200
- req.headers['Content-Type'] = 'application/json'
201
- end
202
-
203
- applovin_res_json = JSON.parse(res.body)
204
-
205
- return applovin_res_json
206
- rescue Exception => e
207
- return nil
208
- end
209
-
210
-
211
-
212
- end
213
-
214
- def req_applovin_mediia_json
215
-
216
-
217
- begin
218
- applovin_url = "https://dash.applovin.com/docs/v1/mediation_sk_adnetwork_ids"
219
- con = Faraday.new
220
- res = con.get do |req|
221
- req.url applovin_url
222
- req.headers['Content-Type'] = 'application/json'
223
- end
224
-
225
- applovin_res_json = JSON.parse(res.body)
226
- return applovin_res_json
227
- rescue Exception => e
228
- return nil
229
- end
64
+ def run
65
+ # 使用 ApplovinXcodeHelper 执行更新操作
66
+ Pindo::ApplovinXcodeHelper.update_applovin_config(
67
+ project_dir: Dir.pwd,
68
+ appstore_mode: @args_appstore_flag,
69
+ install_script: @args_install_flag,
70
+ upload_config: @args_upload_flag
71
+ )
230
72
  end
231
73
 
232
74
  end
@@ -12,15 +12,15 @@ require 'pindo/module/task/task_manager'
12
12
  require 'pindo/module/task/model/git_tag_task'
13
13
  require 'pindo/module/task/model/unity_export_task'
14
14
  require 'pindo/module/task/model/build_task'
15
- require 'pindo/module/task/model/upload_task'
15
+ require 'pindo/module/task/model/jps_upload_task'
16
+ require 'pindo/options/options'
17
+ require 'pindo/options/helpers/bundleid_selector'
16
18
 
17
19
  module Pindo
18
20
  class Command
19
21
  class Ios < Command
20
22
  class Autobuild < Ios
21
23
 
22
- include Appselect
23
- include Pindo::Githelper
24
24
  # 命令的简要说明 - 打包iOS工程并发布到JPS
25
25
  self.summary = '编译IPA(支持Xcode/Unity工程),自动修改工程,支持上传JPS'
26
26
 
@@ -65,30 +65,48 @@ module Pindo
65
65
  # 暂无参数
66
66
  ]
67
67
 
68
+ # 定义此命令使用的参数项(类方法,避免重复定义)
69
+ def self.option_items
70
+ @option_items ||= begin
71
+ items = Pindo::Options::OptionGroup.merge(
72
+ Pindo::Options::BuildOptions.select(:bundleid, :build_type),
73
+ Pindo::Options::JPSOptions.select(:proj, :upload, :send)
74
+ )
75
+
76
+ # 为 bundleid 参数添加 value_block(交互式选择)
77
+ bundleid_item = items.find { |item| item.key == :bundleid }
78
+ if bundleid_item
79
+ bundleid_item.value_block = proc do |command_instance|
80
+ # 根据构建类型选择不同的 Bundle ID
81
+ build_type = command_instance.instance_variable_get(:@build_type) || 'dev'
82
+ Pindo::Options::BundleIdSelector.select_bundleid(build_type)
83
+ end
84
+ end
85
+
86
+ items
87
+ end
88
+ end
89
+
68
90
  # 命令的选项列表
69
91
  def self.options
70
- [
71
- ['--bundleid=ID', '指定打包的Bundle ID'],
72
- ['--proj=NAME', '指定上传到测试平台的项目名称'],
73
- ['--upload', '编译后上传到测试平台(上传成功后自动发送给自己)'],
74
- ['--send', '发送通知到测试群组(同时也会发送给自己)'],
75
- ['--adhoc', '使用AdHoc证书打包(默认使用Dev证书)'],
76
- ['--deploy', '使用发布证书打包']
77
- ].concat(super)
92
+ # 转换为 CLAide 格式
93
+ option_items.map { |item| item.to_claide_option }.concat(super)
78
94
  end
79
95
 
80
96
  def initialize(argv)
97
+ # 先提取 build_type(因为 bundleid 的 value_block 需要用到它)
98
+ @build_type = argv.option('build_type', 'dev')
81
99
 
82
- @args_deploy_flag = argv.flag?('deploy', false)
83
- @args_adhoc_flag = argv.flag?('adhoc', false)
84
- @args_upload_flag = argv.flag?('upload', false)
85
- @args_send_flag = argv.flag?('send', false)
86
- @args_proj_name = argv.option('proj')
87
- @args_bundle_id = argv.option('bundleid')
100
+ # 一行代码完成参数初始化(自动推导命令名、自动启用缓存)
101
+ @options = initialize_options(argv)
88
102
 
89
- if @args_send_flag
90
- @args_upload_flag = true
91
- end
103
+ # 保存参数到实例变量
104
+ @build_type = @options[:build_type] || @build_type # 使用 options 中的值,如果没有则用之前提取的
105
+ @args_send_flag = @options[:send]
106
+ # send 依赖 upload:如果指定了 send,自动启用 upload
107
+ @args_upload_flag = @options[:send] || @options[:upload]
108
+ @args_proj_name = @options[:proj]
109
+ @args_bundle_id = @options[:bundleid]
92
110
 
93
111
  super
94
112
  @additional_args = argv.remainder!
@@ -102,25 +120,31 @@ module Pindo
102
120
  def run
103
121
  pindo_project_dir = Dir.pwd
104
122
 
105
- # 加载 JPS 配置(如果存在)
106
- context = Pindo::PindoContext.instance
107
- context.load_and_apply_jps_config(pindo_project_dir)
108
- # 确认并应用缓存(如果有)
109
- context.confirm_and_apply_cache
123
+ begin
124
+ # 加载 JPS 配置(如果存在)
125
+ context = Pindo::PindoContext.instance
126
+ context.load_and_apply_jps_config(pindo_project_dir)
110
127
 
111
- # 准备配置
112
- config = prepare_ios_config(pindo_project_dir)
128
+ # 注意:参数缓存已在 initialize 中通过 GlobalOptionsState 处理
129
+ # 不再使用 PindoContext 的缓存机制
113
130
 
114
- # 创建并执行任务
115
- tasks = make_build_task(config)
131
+ # 准备配置
132
+ config = prepare_ios_config(pindo_project_dir)
116
133
 
117
- # 添加到任务管理器并执行
118
- task_manager = Pindo::TaskSystem::TaskManager.instance
119
- task_manager.clear_all
120
- tasks.each { |task| task_manager.add_task(task) }
121
- task_manager.start
134
+ # 创建并执行任务
135
+ tasks = make_build_task(config)
122
136
 
123
- system "open #{pindo_project_dir}"
137
+ # 添加到任务管理器并执行
138
+ task_manager = Pindo::TaskSystem::TaskManager.instance
139
+ task_manager.clear_all
140
+ tasks.each { |task| task_manager.add_task(task) }
141
+ task_manager.start
142
+
143
+ system "open #{pindo_project_dir}"
144
+ ensure
145
+ # 清除命令状态(如果启用了缓存,这里会自动保存)
146
+ Pindo::Options::GlobalOptionsState.instance.clear
147
+ end
124
148
  end
125
149
 
126
150
  private
@@ -158,6 +182,7 @@ module Pindo
158
182
  'ios',
159
183
  project_path: config[:project_path],
160
184
  export_path: ios_export_path,
185
+ deploy_mode: @build_type, # 根据 build_type 传递部署模式
161
186
  context: unity_context
162
187
  )
163
188
  unity_task.dependencies << git_tag_task.id
@@ -165,7 +190,7 @@ module Pindo
165
190
  end
166
191
 
167
192
  # 3. 构建任务
168
- build_mode = @args_deploy_flag ? :release : (@args_adhoc_flag ? :adhoc : :dev)
193
+ build_mode = @build_type.to_sym
169
194
 
170
195
  # 确定 iOS 项目路径
171
196
  if is_unity
@@ -195,7 +220,7 @@ module Pindo
195
220
 
196
221
  # 4. 上传任务(如果需要)
197
222
  if @args_upload_flag
198
- upload_task = Pindo::TaskSystem::UploadTask.new(
223
+ upload_task = Pindo::TaskSystem::JPSUploadTask.new(
199
224
  'ipa',
200
225
  File.join(ios_project_path, 'build'),
201
226
  nil,
@@ -218,12 +243,8 @@ module Pindo
218
243
 
219
244
  # 准备 iOS 配置
220
245
  def prepare_ios_config(pindo_project_dir)
221
- # 获取 Bundle ID
222
- bundle_id = if @args_bundle_id
223
- @args_bundle_id
224
- else
225
- @args_deploy_flag ? get_selected_deploy_bundleid() : get_selected_dev_bundleid()
226
- end
246
+ # Bundle ID 已经通过 value_block 自动获取
247
+ bundle_id = @args_bundle_id
227
248
 
228
249
  # 获取 JPS 配置
229
250
  app_info_obj, workflow_info = PgyerHelper.share_instace.prepare_upload(
@@ -1,8 +1,10 @@
1
1
  require 'highline/import'
2
2
  require 'xcodeproj'
3
- require 'find'
3
+ require 'find'
4
4
  require 'fileutils'
5
5
  require 'pindo/base/executable'
6
+ require 'pindo/config/ios_config_parser'
7
+ require 'pindo/module/xcode/ipa_resign_helper'
6
8
 
7
9
  module Pindo
8
10
  class Command
@@ -109,10 +111,12 @@ module Pindo
109
111
  end
110
112
  puts "mainapp_bundleid: #{mainapp_bundleid}"
111
113
 
112
- args_temp = []
113
- args_temp << mainapp_bundleid
114
-
115
- Pindo::Command::Deploy::Pullconfig::run(args_temp)
114
+ # 拉取应用配置
115
+ require 'pindo/config/build_info_manager'
116
+ Pindo::BuildInfoManager.share_instance.pull_appconfig_with_reponame(
117
+ repo_name: mainapp_bundleid,
118
+ target_dir: Dir.pwd
119
+ )
116
120
 
117
121
  app_info_obj = nil
118
122
  workflow_info = nil
@@ -126,23 +130,34 @@ module Pindo
126
130
  )
127
131
  end
128
132
 
129
- args_temp = []
130
- if @args_adhoc_flag
131
- args_temp << "--adhoc"
132
- else
133
- args_temp << "--dev"
134
- end
135
-
136
133
  if !ipa_file_name.nil?
137
-
138
- args_temp << "--ipa=#{ipa_file_name}"
139
- Pindo::Command::Deploy::Resign::run(args_temp)
134
+ # 加载配置获取 Bundle ID
135
+ config_file = File.join(Dir.pwd, "config.json")
136
+ config_parser = Pindo::IosConfigParser.instance
137
+ config_parser.load_config(config_file: config_file)
138
+ bundle_id = config_parser.bundle_id
139
+
140
+ if bundle_id.nil? || bundle_id.empty?
141
+ raise Informative, "无法从配置文件中获取 Bundle ID"
142
+ end
140
143
 
144
+ # 确定构建类型并安装证书
145
+ build_type = @args_adhoc_flag ? 'adhoc' : 'dev'
146
+ cert_args = build_type == 'adhoc' ? ['--build_type=adhoc'] : []
147
+ Pindo::Command::Appstore::Cert::run(cert_args)
148
+
149
+ # 使用 IpaResignHelper 进行重签名
150
+ ipa_file_upload = Pindo::IpaResignHelper.resign_ipa(
151
+ ipa_file_path: ipa_file_name,
152
+ bundle_id: bundle_id
153
+ )
154
+
155
+ if ipa_file_upload.nil?
156
+ raise Informative, "重签名失败"
157
+ end
141
158
 
142
- ipa_file_name = File::expand_path(ipa_file_name)
143
- ipa_base_name = File.basename(ipa_file_name, ".ipa")
144
- ipa_dir = File.dirname(ipa_file_name)
145
- ipa_file_upload = File.join(ipa_dir, ipa_base_name + "_resigned.ipa")
159
+ puts "\n重签名成功!"
160
+ puts "重签名后的 IPA: #{ipa_file_upload}"
146
161
 
147
162
  if !ipa_file_upload.nil? && !app_info_obj.nil?
148
163
  result_data = PgyerHelper.share_instace.start_upload(
@@ -159,13 +159,16 @@ module Pindo
159
159
  end
160
160
 
161
161
 
162
- args_temp = []
163
- Pindo::Command::Deploy::Build::run(args_temp)
164
-
165
-
162
+ # 使用 XcodeBuildHelper 进行构建
166
163
  Dir.chdir(pindo_project_dir)
167
- build_path = File.join(pindo_project_dir, "build", "*.{ipa,app}")
168
- ipa_file_upload = Dir.glob(build_path).max_by {|f| File.mtime(f)}
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
169
172
 
170
173
  if !ipa_file_upload.nil? && !app_info_obj.nil?
171
174
 
@@ -6,8 +6,6 @@ module Pindo
6
6
  class Cert < Ios
7
7
 
8
8
  include Appselect
9
-
10
- include XcodeCertHelper
11
9
 
12
10
  # 命令的简要说明 - 更新证书并设置工程
13
11
  self.summary = '更新证书并使用新证书设置Xcode工程'
@@ -68,28 +66,31 @@ module Pindo
68
66
  mainapp_bundleid = get_selected_dev_bundleid()
69
67
  end
70
68
 
71
- args_temp = []
72
- args_temp << mainapp_bundleid
73
- Pindo::Command::Deploy::Pullconfig::run(args_temp)
74
-
69
+ # 拉取应用配置
70
+ require 'pindo/config/build_info_manager'
71
+ Pindo::BuildInfoManager.share_instance.pull_appconfig_with_reponame(
72
+ repo_name: mainapp_bundleid,
73
+ target_dir: Dir.pwd
74
+ )
75
75
 
76
76
  project_dir = Dir.pwd
77
77
  Dir.chdir(project_dir)
78
- config_json_file = File.join(project_dir,"config.json")
79
- # 处理entitlements配置
80
- Pindo::XcodeBuildConfig.update_entitlements_config(project_dir: project_dir, config_file: config_json_file)
81
78
 
82
- args_temp = []
83
- if @args_adhoc_flag
84
- args_temp << "--adhoc"
85
- else
86
- args_temp << "--dev"
87
- end
79
+ # 加载配置到 IosConfigParser
80
+ require 'pindo/config/ios_config_parser'
81
+ config_json_file = File.join(project_dir, "config.json")
82
+ Pindo::IosConfigParser.instance.load_config(config_file: config_json_file)
88
83
 
84
+ # 处理entitlements配置
85
+ Pindo::XcodeBuildConfig.update_entitlements_config(project_dir: project_dir)
89
86
 
87
+ # 确定构建类型
88
+ build_type = @args_adhoc_flag ? 'adhoc' : 'dev'
90
89
 
90
+ # 检测平台类型
91
91
  project_fullname = Dir.glob(File.join(project_dir, "/*.xcodeproj")).max_by {|f| File.mtime(f)}
92
92
  if !project_fullname.nil?
93
+ require 'xcodeproj'
93
94
  project_obj = Xcodeproj::Project.open(project_fullname)
94
95
  project_build_platform = project_obj.root_object.build_configuration_list.get_setting("SDKROOT")["Release"]
95
96
  if !project_build_platform.nil? && project_build_platform.eql?("macosx")
@@ -97,12 +98,18 @@ module Pindo
97
98
  end
98
99
  end
99
100
 
100
- if @args_macos_flag
101
- args_temp << "--macos"
102
- end
103
-
104
- Pindo::Command::Deploy::Cert::run(args_temp)
101
+ platform_type = @args_macos_flag ? 'macos' : 'ios'
102
+
103
+ # 直接调用 XcodeCertHelper 安装和配置证书
104
+ # 配置已经加载到 IosConfigParser,不需要再传 config_file
105
+ require 'pindo/module/cert/xcode_cert_helper'
106
+ Pindo::XcodeCertHelper.install_and_config_certs(
107
+ build_type: build_type,
108
+ platform_type: platform_type,
109
+ project_dir: project_dir
110
+ )
105
111
 
112
+ puts "✓ 证书安装和配置完成!"
106
113
  end
107
114
 
108
115
 
@@ -1,6 +1,7 @@
1
1
  require 'highline/import'
2
2
  require 'fileutils'
3
3
  require 'json'
4
+ require 'pindo/module/xcode/cocoapods_helper'
4
5
 
5
6
  module Pindo
6
7
  class Command
@@ -52,43 +53,11 @@ module Pindo
52
53
  end
53
54
 
54
55
  def run
55
-
56
- working_dir = @project_dir
57
-
58
- pod_array = pindo_single_config.pod_repo_dict
59
- pod_index_url = nil
60
- if !pod_array.nil?
61
- pod_index_url = pod_array['podindex']
62
- else
63
- raise Informative, '私有Pod索引地址未知!!'
64
- end
65
- sources = Pod::Config.instance.sources_manager.all
66
- repos_path = File.expand_path("~/.cocoapods/repos")
67
-
68
- private_source = sources.select { |s| s.git? && s.url.to_s.eql?(pod_index_url)}.first
69
- if !private_source.nil?
70
-
71
- puts "私有Pod地址:#{pod_index_url}"
72
- puts "私有Pod目录:~/.cocoapods"
73
- getcode_to_dir(reponame:File.basename(private_source.repo), remote_url: pod_index_url, path:repos_path)
74
- else
75
- puts "私有Pod地址:#{pod_index_url}"
76
- puts "私有Pod目录:~/.cocoapods"
77
- repository_name = pod_index_url.split("/").last.chomp(".git")
78
- getcode_to_dir(reponame:repository_name, remote_url: pod_index_url, path:repos_path)
79
- end
80
-
81
-
82
- if @args_install_flag
83
- begin
84
- if File.exist?("#{working_dir}/Podfile")
85
- Pod::Command::Install::run(['--clean-install'])
86
- end
87
- rescue => e
88
- puts e.message
89
- end
90
- end
91
-
56
+ # 使用 CocoaPodsHelper 执行更新操作
57
+ Pindo::CocoaPodsHelper.update_pod_repo(
58
+ install: @args_install_flag,
59
+ project_dir: @project_dir
60
+ )
92
61
  end
93
62
 
94
63