pindo 4.6.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (120) hide show
  1. checksums.yaml +7 -0
  2. data/bin/pindo +35 -0
  3. data/lib/pindo/base/aeshelper.rb +31 -0
  4. data/lib/pindo/base/deviceinfo.rb +90 -0
  5. data/lib/pindo/base/executable.rb +224 -0
  6. data/lib/pindo/base/githelper.rb +489 -0
  7. data/lib/pindo/base/hashhelper.rb +134 -0
  8. data/lib/pindo/base/plaininformative.rb +15 -0
  9. data/lib/pindo/base/plistbuddyexecutable.rb +121 -0
  10. data/lib/pindo/base/standarderror.rb +14 -0
  11. data/lib/pindo/client/applovinclient.rb +156 -0
  12. data/lib/pindo/client/aws3sclient.rb +183 -0
  13. data/lib/pindo/client/bossclient.rb +229 -0
  14. data/lib/pindo/client/bossconfigclient.rb +175 -0
  15. data/lib/pindo/client/giteeclient.rb +65 -0
  16. data/lib/pindo/client/httpclient.rb +40 -0
  17. data/lib/pindo/client/pgyerclient.rb +439 -0
  18. data/lib/pindo/client/tgateclient.rb +103 -0
  19. data/lib/pindo/command.rb +101 -0
  20. data/lib/pindo/config/pindoconfig.rb +439 -0
  21. data/lib/pindo/config/pindouserlocalconfig.rb +81 -0
  22. data/lib/pindo/deploy/Fastfile +233 -0
  23. data/lib/pindo/deploy/build.rb +167 -0
  24. data/lib/pindo/deploy/bundleid.rb +245 -0
  25. data/lib/pindo/deploy/cert.rb +508 -0
  26. data/lib/pindo/deploy/check.rb +79 -0
  27. data/lib/pindo/deploy/configproj.rb +89 -0
  28. data/lib/pindo/deploy/confusecode.rb +248 -0
  29. data/lib/pindo/deploy/confuseproj.rb +112 -0
  30. data/lib/pindo/deploy/fabric.rb +58 -0
  31. data/lib/pindo/deploy/getitcinfo.rb +248 -0
  32. data/lib/pindo/deploy/iap.rb +796 -0
  33. data/lib/pindo/deploy/initconfig.rb +128 -0
  34. data/lib/pindo/deploy/itcapp.rb +147 -0
  35. data/lib/pindo/deploy/itcinfo.rb +369 -0
  36. data/lib/pindo/deploy/pem.rb +55 -0
  37. data/lib/pindo/deploy/pullconfig.rb +46 -0
  38. data/lib/pindo/deploy/pushconfig.rb +83 -0
  39. data/lib/pindo/deploy/quswark.rb +146 -0
  40. data/lib/pindo/deploy/quswauth.rb +67 -0
  41. data/lib/pindo/deploy/reportbug.rb +135 -0
  42. data/lib/pindo/deploy/resign.rb +338 -0
  43. data/lib/pindo/deploy/tag.rb +108 -0
  44. data/lib/pindo/deploy/updateconfig.rb +129 -0
  45. data/lib/pindo/deploy/uploadipa.rb +63 -0
  46. data/lib/pindo/deploy.rb +44 -0
  47. data/lib/pindo/dev/autobuild.rb +204 -0
  48. data/lib/pindo/dev/autoresign.rb +186 -0
  49. data/lib/pindo/dev/confusecode.rb +127 -0
  50. data/lib/pindo/dev/confuseproj.rb +111 -0
  51. data/lib/pindo/dev/createbuild.rb +159 -0
  52. data/lib/pindo/dev/debug.rb +141 -0
  53. data/lib/pindo/dev/pub.rb +171 -0
  54. data/lib/pindo/dev/renewcert.rb +142 -0
  55. data/lib/pindo/dev.rb +23 -0
  56. data/lib/pindo/env/dreamstudio.rb +53 -0
  57. data/lib/pindo/env/flutter.rb +59 -0
  58. data/lib/pindo/env/flutter.sh +116 -0
  59. data/lib/pindo/env/quarkenv.rb +58 -0
  60. data/lib/pindo/env/swarkenv.rb +62 -0
  61. data/lib/pindo/env/workhard.rb +56 -0
  62. data/lib/pindo/env.rb +17 -0
  63. data/lib/pindo/ipa/autoresign.rb +188 -0
  64. data/lib/pindo/ipa/import.rb +261 -0
  65. data/lib/pindo/ipa/output.rb +396 -0
  66. data/lib/pindo/ipa.rb +22 -0
  67. data/lib/pindo/lib/forcepush.rb +159 -0
  68. data/lib/pindo/lib/lint.rb +115 -0
  69. data/lib/pindo/lib/push.rb +143 -0
  70. data/lib/pindo/lib/update.rb +75 -0
  71. data/lib/pindo/lib.rb +18 -0
  72. data/lib/pindo/module/appselect.rb +200 -0
  73. data/lib/pindo/module/appstore_in_app_purchase.rb +1803 -0
  74. data/lib/pindo/module/appstore_metadata_connect_api_helper.rb +12 -0
  75. data/lib/pindo/module/appstore_metadata_fastlane_helper.rb +922 -0
  76. data/lib/pindo/module/buildconfighelper.rb +13 -0
  77. data/lib/pindo/module/buildhelper.rb +76 -0
  78. data/lib/pindo/module/commonconfuseproj.rb +271 -0
  79. data/lib/pindo/module/config_project.sh +143 -0
  80. data/lib/pindo/module/configprojhelper.rb +631 -0
  81. data/lib/pindo/module/iap_tier.json +813 -0
  82. data/lib/pindo/module/icon_contents.json +116 -0
  83. data/lib/pindo/module/imessage_icon.json +91 -0
  84. data/lib/pindo/module/imgset_contents.json +21 -0
  85. data/lib/pindo/module/launchimg_contents.json +21 -0
  86. data/lib/pindo/module/pemcreate.rb +63 -0
  87. data/lib/pindo/module/pgyerhelper.rb +339 -0
  88. data/lib/pindo/module/xcodebuildpre.rb +258 -0
  89. data/lib/pindo/module/xcodehelper.rb +521 -0
  90. data/lib/pindo/options/appconfigoptions.rb +23 -0
  91. data/lib/pindo/options/deployoptions.rb +363 -0
  92. data/lib/pindo/pgyer/apptest.rb +104 -0
  93. data/lib/pindo/pgyer/comment.rb +95 -0
  94. data/lib/pindo/pgyer/download.rb +105 -0
  95. data/lib/pindo/pgyer/login.rb +61 -0
  96. data/lib/pindo/pgyer/upload.rb +234 -0
  97. data/lib/pindo/pgyer.rb +17 -0
  98. data/lib/pindo/repo/clone.rb +78 -0
  99. data/lib/pindo/repo/create.rb +55 -0
  100. data/lib/pindo/repo/login.rb +64 -0
  101. data/lib/pindo/repo/search.rb +60 -0
  102. data/lib/pindo/repo.rb +16 -0
  103. data/lib/pindo/setup.rb +60 -0
  104. data/lib/pindo/upgrade.rb +56 -0
  105. data/lib/pindo/utils/applovin.rb +213 -0
  106. data/lib/pindo/utils/boss.rb +209 -0
  107. data/lib/pindo/utils/clearcert.rb +60 -0
  108. data/lib/pindo/utils/device.rb +279 -0
  109. data/lib/pindo/utils/icon.rb +91 -0
  110. data/lib/pindo/utils/icon.sh +133 -0
  111. data/lib/pindo/utils/podindex.rb +56 -0
  112. data/lib/pindo/utils/podindex.sh +30 -0
  113. data/lib/pindo/utils/renewproj.rb +146 -0
  114. data/lib/pindo/utils/tgate.rb +159 -0
  115. data/lib/pindo/utils/xcassets.rb +46 -0
  116. data/lib/pindo/utils/xcassets.sh +88 -0
  117. data/lib/pindo/utils.rb +29 -0
  118. data/lib/pindo/version.rb +110 -0
  119. data/lib/pindo.rb +34 -0
  120. metadata +364 -0
@@ -0,0 +1,363 @@
1
+
2
+ module Pindo
3
+ class Command
4
+ module DeployOptions
5
+
6
+ attr_accessor :args_array
7
+ attr_accessor :argv_temp
8
+
9
+ attr_accessor :args_appconfig
10
+ attr_accessor :args_appconfig_dir
11
+ attr_accessor :args_appconfig_fullname
12
+
13
+ attr_accessor :args_apple_id
14
+ attr_accessor :args_bundle_id
15
+ attr_accessor :args_repo_name
16
+
17
+
18
+ attr_accessor :apple_id
19
+ attr_accessor :group_id
20
+ attr_accessor :icloud_id
21
+ attr_accessor :bundle_id
22
+ attr_accessor :bundle_id_pushcontent
23
+ attr_accessor :bundle_id_pushservice
24
+ attr_accessor :bundle_id_keyboard
25
+ attr_accessor :bundle_id_imessage
26
+ attr_accessor :bundle_id_extension
27
+ attr_accessor :bundle_id_siri
28
+ attr_accessor :bundle_id_siriui
29
+ attr_accessor :bundle_id_widget
30
+ attr_accessor :bundle_id_extensionad
31
+ attr_accessor :bundle_id_extensionporn
32
+ attr_accessor :bundle_id_watchapp
33
+ attr_accessor :bundle_id_watchapp_extension
34
+
35
+ attr_accessor :deploy_repo_name
36
+ attr_accessor :deploy_acount_id
37
+ attr_accessor :deploy_group_id
38
+ attr_accessor :deploy_icloud_id
39
+ attr_accessor :deploy_identifier
40
+ attr_accessor :deploy_identifier_pushcontent
41
+ attr_accessor :deploy_identifier_pushservice
42
+ attr_accessor :deploy_identifier_keyboard
43
+ attr_accessor :deploy_identifier_imessage
44
+ attr_accessor :deploy_identifier_siri
45
+ attr_accessor :deploy_identifier_siriui
46
+ attr_accessor :deploy_identifier_widget
47
+ attr_accessor :deploy_identifier_extension
48
+ attr_accessor :deploy_identifier_extensionad
49
+ attr_accessor :deploy_identifier_extensionporn
50
+ attr_accessor :deploy_identifier_watchapp
51
+ attr_accessor :deploy_identifier_watchapp_extension
52
+
53
+ attr_accessor :args_dev_flag
54
+ attr_accessor :args_adhoc_flag
55
+ attr_accessor :args_appstore_flag
56
+
57
+ attr_accessor :newconfuse_flag
58
+ attr_accessor :oldconfuse_flag
59
+
60
+ attr_accessor :config_json
61
+ attr_accessor :additional_args
62
+
63
+ def self.options
64
+ [
65
+ ['--u=', 'input apple id'],
66
+ ['--a=', 'input bundle id'],
67
+ ['--repo=', 'input build config repo name'],
68
+
69
+ ['--dev', 'use dev build mode'],
70
+ ['--adhoc', 'use adhoc build mode'],
71
+ ['--appstore', 'use appstore build mode'],
72
+
73
+ ['--nocreate', 'no create xcode project'],
74
+
75
+ ['--newconfuse', 'use version 2.0 confuse'],
76
+ ['--oldconfuse', 'use version 1.0 confuse'],
77
+ ['--type=class', 'input confuse type, defautl: --type=class_method_variable_protocol_property_category_pods']
78
+
79
+ ].concat(super)
80
+ end
81
+
82
+ def initialize(argv)
83
+
84
+ @args_array = argv.remainder | []
85
+
86
+ @args_appconfig = argv.shift_argument || './config.json'
87
+
88
+ @args_apple_id = argv.option('u')
89
+ @args_bundle_id = argv.option('a')
90
+ @deploy_repo_name = argv.option('repo')
91
+
92
+ @args_dev_flag = argv.flag?('dev', false)
93
+ @args_adhoc_flag = argv.flag?('adhoc', false)
94
+ @args_appstore_flag = argv.flag?('appstore', false)
95
+
96
+ @newconfuse_flag = argv.flag?('newconfuse', true)
97
+ @oldconfuse_flag = argv.flag?('oldconfuse', false)
98
+
99
+ @confuse_type = argv.option('type') || 'class_method_protocol_property_category_variable_pods'
100
+
101
+ super
102
+ @additional_args = argv.remainder!
103
+
104
+ end
105
+
106
+ def validate!
107
+ super
108
+
109
+ if !@args_appconfig.empty? && File::file?(@args_appconfig)
110
+ @args_appconfig_dir=File::expand_path(File::dirname(@args_appconfig))
111
+ @args_appconfig_fullname=File::join(@args_appconfig_dir, File::basename(@args_appconfig))
112
+ @config_json=JSON.parse(File.read(@args_appconfig_fullname))
113
+ end
114
+
115
+ version = nil
116
+ if !@config_json.nil?
117
+ version = @config_json['config_version']
118
+ end
119
+ if version.nil?
120
+ # raise Informative, "Your config.json is out of date, please upgrade config.json !!!"
121
+ end
122
+
123
+ init_deploy_params()
124
+
125
+ init_develop_params()
126
+
127
+ help! 'Need input a apple id, you may input wiht --u options' if @args_apple_id.nil? && @deploy_acount_id.nil?
128
+
129
+ help! 'Need input a bundle id, you may input with --a options' if @args_bundle_id.nil? && @deploy_identifier.nil?
130
+
131
+ print_params_info()
132
+
133
+ end
134
+
135
+ def get_build_type_args()
136
+ args_temp = []
137
+
138
+ mode_flag = "--adhoc"
139
+ if @args_dev_flag
140
+ mode_flag = "--dev"
141
+ end
142
+ if @args_appstore_flag
143
+ mode_flag = "--appstore"
144
+ end
145
+ args_temp << mode_flag
146
+ end
147
+
148
+ def get_modify_bundleid_args()
149
+
150
+ args_temp = []
151
+
152
+ unless @apple_id.eql?(pindo_single_config.demo_apple_id)
153
+ @args_apple_id = pindo_single_config.demo_apple_id
154
+ args_temp << "--u=#{@args_apple_id}"
155
+ end
156
+
157
+ unless @apple_id.eql?(pindo_single_config.demo_apple_id) && @apple_id.eql?(@deploy_acount_id)
158
+ if @args_bundle_id.nil? || @args_bundle_id.empty?
159
+ @args_bundle_id = pindo_single_config.demo_bundle_id
160
+ args_temp << "--a=#{@args_bundle_id}"
161
+ else
162
+ args_temp << "--a=#{@args_bundle_id}"
163
+ end
164
+ end
165
+
166
+ unless @deploy_repo_name.nil?
167
+ args_temp << "--repo=#{@deploy_repo_name}"
168
+ end
169
+
170
+ return args_temp
171
+ end
172
+
173
+ def get_confuse_type_args()
174
+ args_temp = []
175
+ confuse_flag = "--newconfuse"
176
+ if @oldconfuse_flag
177
+ mode_flag = "--oldconfuse"
178
+ end
179
+ args_temp << mode_flag
180
+ end
181
+
182
+ def init_deploy_params()
183
+
184
+ if !@config_json.nil?
185
+ if @config_json['account_info'] && @config_json['account_info']['apple_acount_id']
186
+ @deploy_acount_id = @config_json['account_info']['apple_acount_id']
187
+ end
188
+
189
+ if @config_json['app_info'] && @config_json['app_info']['app_group_id']
190
+ @deploy_group_id = @config_json['app_info']['app_group_id']
191
+ end
192
+
193
+ if @config_json['app_info'] && @config_json['app_info']['app_icloud_id']
194
+ @deploy_icloud_id = @config_json['app_info']['app_icloud_id']
195
+ end
196
+
197
+ if @config_json['app_info'] && @config_json['app_info']['app_identifier']
198
+ @deploy_identifier = @config_json['app_info']['app_identifier']
199
+ end
200
+
201
+ if @config_json['app_info'] && @config_json['app_info']['app_identifier_pushcontent']
202
+ @deploy_identifier_pushcontent = @config_json['app_info']['app_identifier_pushcontent']
203
+ end
204
+
205
+ if @config_json['app_info'] && @config_json['app_info']['app_identifier_pushservice']
206
+ @deploy_identifier_pushservice = @config_json['app_info']['app_identifier_pushservice']
207
+ end
208
+
209
+ if @config_json['app_info'] && @config_json['app_info']['app_identifier_keyboard']
210
+ @deploy_identifier_keyboard = @config_json['app_info']['app_identifier_keyboard']
211
+ end
212
+
213
+ if @config_json['app_info'] && @config_json['app_info']['app_identifier_imessage']
214
+ @deploy_identifier_imessage = @config_json['app_info']['app_identifier_imessage']
215
+ end
216
+
217
+ if @config_json['app_info'] && @config_json['app_info']['app_identifier_siri']
218
+ @deploy_identifier_siri = @config_json['app_info']['app_identifier_siri']
219
+ end
220
+
221
+ if @config_json['app_info'] && @config_json['app_info']['app_identifier_siriui']
222
+ @deploy_identifier_siriui = @config_json['app_info']['app_identifier_siriui']
223
+ end
224
+
225
+ if @config_json['app_info'] && @config_json['app_info']['app_identifier_widget']
226
+ @deploy_identifier_widget = @config_json['app_info']['app_identifier_widget']
227
+ end
228
+
229
+ if @config_json['app_info'] && @config_json['app_info']['app_identifier_extension']
230
+ @deploy_identifier_extension = @config_json['app_info']['app_identifier_extension']
231
+ end
232
+
233
+ if @config_json['app_info'] && @config_json['app_info']['app_identifier_extensionad']
234
+ @deploy_identifier_extensionad = @config_json['app_info']['app_identifier_extensionad']
235
+ end
236
+
237
+ if @config_json['app_info'] && @config_json['app_info']['app_identifier_extensionporn']
238
+ @deploy_identifier_extensionporn = @config_json['app_info']['app_identifier_extensionporn']
239
+ end
240
+
241
+ if @config_json['app_info'] && @config_json['app_info']['app_identifier_watchapp']
242
+ @deploy_identifier_watchapp = @config_json['app_info']['app_identifier_watchapp']
243
+ end
244
+
245
+ if @config_json['app_info'] && @config_json['app_info']['app_identifier_watchapp_extension']
246
+ @deploy_identifier_watchapp_extension = @config_json['app_info']['app_identifier_watchapp_extension']
247
+ end
248
+ end
249
+
250
+ if @deploy_repo_name.nil?
251
+ @deploy_repo_name = @deploy_identifier
252
+ end
253
+
254
+ @apple_id = @deploy_acount_id
255
+ @bundle_id = @deploy_identifier
256
+ @group_id = @deploy_group_id
257
+ @icloud_id = @deploy_icloud_id
258
+ @bundle_id_pushcontent = @deploy_identifier_pushcontent
259
+ @bundle_id_pushservice = @deploy_identifier_pushservice
260
+ @bundle_id_keyboard = @deploy_identifier_keyboard
261
+ @bundle_id_imessage = @deploy_identifier_imessage
262
+ @bundle_id_siri = @deploy_identifier_siri
263
+ @bundle_id_siriui = @deploy_identifier_siriui
264
+ @bundle_id_widget = @deploy_identifier_widget
265
+ @bundle_id_extension = @deploy_identifier_extension
266
+ @bundle_id_extensionad = @deploy_identifier_extensionad
267
+ @bundle_id_extensionporn = @deploy_identifier_extensionporn
268
+ @bundle_id_watchapp = @deploy_identifier_watchapp
269
+ @bundle_id_watchapp_extension = @deploy_identifier_watchapp_extension
270
+
271
+ end
272
+
273
+ def init_develop_params()
274
+ unless @args_apple_id.nil?
275
+ @apple_id = @args_apple_id
276
+ end
277
+
278
+ unless @args_bundle_id.nil?
279
+ @bundle_id = @args_bundle_id
280
+ @group_id = "group." + @bundle_id
281
+ @icloud_id = "iCloud." + @bundle_id
282
+ @bundle_id_pushcontent = @bundle_id + '.content'
283
+ @bundle_id_pushservice = @bundle_id + '.service'
284
+ @bundle_id_keyboard = @bundle_id + '.keyboard'
285
+ @bundle_id_imessage = @bundle_id + '.imessage'
286
+ @bundle_id_siri = @bundle_id + '.siri'
287
+ @bundle_id_siriui = @bundle_id + '.siriui'
288
+ @bundle_id_widget = @bundle_id + '.widget'
289
+ @bundle_id_extension = @bundle_id + '.extension'
290
+ @bundle_id_extensionad = @bundle_id + '.extensionad'
291
+ @bundle_id_extensionporn = @bundle_id + '.extensionporn'
292
+ @bundle_id_watchapp = @bundle_id + '.watchapp'
293
+ @bundle_id_watchapp_extension = @bundle_id + '.watchapp.extension'
294
+ end
295
+ end
296
+
297
+
298
+ def check_config_version()
299
+
300
+ build_version = @config_json['config_version']
301
+ build_version_int = build_version.split('.').map(&:to_i)
302
+
303
+ if build_version_int[0] < 1 || (build_version_int[0] ==1 && build_version_int[1] < 4)
304
+ raise Informative, "config.json 版本太低,配置结构发生变化了,要求config_version 1.4.0及以上版本, 可以使用pindo deploy updateconfig 更新config.json"
305
+ end
306
+ end
307
+
308
+ def print_params_info()
309
+
310
+ puts "\n\n\n======================================================================================="
311
+ puts "***************************************************************************************\n\n"
312
+ puts "Action: #{self.class.summary} \n\n"
313
+ puts "config.json = #{@args_appconfig_fullname}"
314
+ puts "args_apple_id = #{@args_apple_id}"
315
+ puts "args_bundle_id = #{@args_bundle_id}\n\n"
316
+
317
+ puts "deploy_repo_name = #{@deploy_repo_name}"
318
+ puts "deploy_acount_id = #{@deploy_acount_id}"
319
+ puts "deploy_group_id = #{@deploy_group_id}"
320
+ puts "deploy_icloud_id = #{@deploy_icloud_id}"
321
+ puts "deploy_identifier = #{@deploy_identifier}"
322
+ puts "deploy_identifier_pushcontent = #{@deploy_identifier_pushcontent}"
323
+ puts "deploy_identifier_pushservice = #{@deploy_identifier_pushservice}"
324
+ puts "deploy_identifier_keyboard = #{@deploy_identifier_keyboard}"
325
+ puts "deploy_identifier_imessage = #{@deploy_identifier_imessage}"
326
+ puts "deploy_identifier_siri = #{@deploy_identifier_siri}"
327
+ puts "deploy_identifier_siriui = #{@deploy_identifier_siriui}"
328
+ puts "deploy_identifier_widget = #{@deploy_identifier_widget}"
329
+ puts "deploy_identifier_extension = #{@deploy_identifier_extension}"
330
+ puts "deploy_identifier_extensionad = #{@deploy_identifier_extensionad}"
331
+ puts "deploy_identifier_extensionporn = #{@deploy_identifier_extensionporn}"
332
+ puts "deploy_identifier_watchapp = #{@deploy_identifier_watchapp}"
333
+ puts "deploy_identifier_watchapp_extension = #{@deploy_identifier_watchapp_extension}\n\n"
334
+
335
+ puts "apple_id = #{@apple_id}"
336
+ puts "bundle_id = #{@bundle_id}"
337
+ puts "group_id = #{@group_id}"
338
+ puts "icloud_id = #{@icloud_id}"
339
+ puts "bundle_id_pushcontent = #{@bundle_id_pushcontent}"
340
+ puts "bundle_id_pushservice = #{@bundle_id_pushservice}"
341
+ puts "bundle_id_keyboard = #{@bundle_id_keyboard}"
342
+ puts "bundle_id_imessage = #{@bundle_id_imessage}"
343
+ puts "bundle_id_extension = #{@bundle_id_extension}"
344
+ puts "bundle_id_siri = #{@bundle_id_siri}"
345
+ puts "bundle_id_siriui = #{@bundle_id_siriui}"
346
+ puts "bundle_id_widget = #{@bundle_id_widget}"
347
+ puts "bundle_id_extensionad = #{@bundle_id_extensionad}"
348
+ puts "bundle_id_extensionporn = #{@bundle_id_extensionporn}"
349
+ puts "bundle_id_watchapp = #{@bundle_id_watchapp}"
350
+ puts "bundle_id_watchapp_extension = #{@bundle_id_watchapp_extension}\n\n"
351
+
352
+ puts "args_dev_flag = #{@args_dev_flag}"
353
+ puts "args_adhoc_flag = #{@args_adhoc_flag}"
354
+ puts "args_appstore_flag = #{@args_appstore_flag}"
355
+
356
+ puts "\n***************************************************************************************"
357
+ puts "=======================================================================================\n\n"
358
+
359
+ end
360
+
361
+ end
362
+ end
363
+ end
@@ -0,0 +1,104 @@
1
+
2
+
3
+ require 'highline/import'
4
+ require 'fileutils'
5
+ require 'pindo/module/pgyerhelper.rb'
6
+
7
+ module Pindo
8
+ class Command
9
+ class Pgyer < Command
10
+ class Apptest < Pgyer
11
+
12
+
13
+ self.summary = '获取pgyer中指定app的测试链接和二维码'
14
+
15
+ self.description = <<-DESC
16
+ 获取pgyer中指定app的测试链接和二维码,终端运行:pindo pgyer apptest
17
+ DESC
18
+
19
+ self.arguments = [
20
+
21
+ ]
22
+
23
+ def self.options
24
+ [
25
+ ['--login', '强制再次登录pgyer网站'],
26
+ ['--proj', '指定哪个项目(忽略大小写空格等等字符),用法:pindo pgyer apptest --proj=prancksoundv4'],
27
+ ['--list', '列出上传记录并选择,用法:pindo pgyer apptest --list'],
28
+ ['--send', '上传到之后是否发送测试信息,用法:pindo pgyer apptest --send'],
29
+ ].concat(super)
30
+ end
31
+
32
+
33
+ def initialize(argv)
34
+
35
+ @args_login_flag = argv.flag?('login', false)
36
+ @args_list_flag = argv.flag?('list', false)
37
+ @args_send_flag = argv.flag?('send', false)
38
+ @args_proj_name = argv.option('proj')
39
+
40
+ super(argv)
41
+ @additional_args = argv.remainder!
42
+ end
43
+
44
+ def validate!
45
+ if @args_proj_name.nil?
46
+ xcodeproj_file_name = Dir.glob(File.join(Dir.pwd, "/*.xcodeproj")).max_by {|f| File.mtime(f)}
47
+ proj_name = File.basename(xcodeproj_file_name, ".xcodeproj") if xcodeproj_file_name
48
+ if !proj_name.nil?
49
+ puts
50
+ answer = agree("Pgyer的App项目代号是: #{proj_name} ?(Y/n)")
51
+ if answer
52
+ @args_proj_name = proj_name
53
+ end
54
+ end
55
+ end
56
+ super
57
+ end
58
+
59
+ def run
60
+
61
+ @pgyer_client = PgyerClient.new
62
+ app_info_obj = nil
63
+ login_success = @pgyer_client.do_login(force_login:@args_login_flag)
64
+ if login_success
65
+ PgyerHelper.share_instace.get_app_list_in_pgyer(client:@pgyer_client)
66
+ if !@args_proj_name.nil?
67
+ app_info_obj = PgyerHelper.share_instace.find_app_info_with_obj_list(proj_name:@args_proj_name)
68
+ end
69
+
70
+ if app_info_obj.nil?
71
+ proj_name = ask('请输入Pyger上的App代号(大小写空格忽略):') || nil
72
+ @args_proj_name = proj_name.strip
73
+ app_info_obj = PgyerHelper.share_instace.find_app_info_with_obj_list(proj_name:@args_proj_name)
74
+ end
75
+ end
76
+
77
+ if app_info_obj.nil?
78
+ raise Informative, "#{proj_name} 错误, 请输入正确的App代号名称, pgyer网站没有该App"
79
+ end
80
+
81
+ if !app_info_obj.nil?
82
+
83
+ version_item_obj = PgyerHelper.share_instace.get_versioon_history_item(client:@pgyer_client, app_info_obj:app_info_obj, list_select_flat:@args_list_flag)
84
+
85
+ if version_item_obj.nil?
86
+ raise Informative, "没有找到上传记录"
87
+ end
88
+
89
+
90
+ msg_data = PgyerHelper.share_instace.make_msg_data(app_info_obj:app_info_obj, app_version_info_obj:version_item_obj, msg_from: @pgyer_client.token["username"])
91
+ PgyerHelper.share_instace.print_app_version_info(msg_data:msg_data)
92
+ if @args_send_flag
93
+ PgyerHelper.share_instace.send_apptest_wechat_msg(msg_data:msg_data)
94
+ end
95
+
96
+ end
97
+
98
+ end
99
+
100
+
101
+ end
102
+ end
103
+ end
104
+ end
@@ -0,0 +1,95 @@
1
+
2
+
3
+ require 'highline/import'
4
+ require 'fileutils'
5
+ require 'pindo/module/pgyerhelper.rb'
6
+
7
+
8
+ module Pindo
9
+ class Command
10
+ class Pgyer < Command
11
+ class Comment < Pgyer
12
+
13
+ self.summary = '修改pgyer中已经上传安装包的备注信息'
14
+
15
+ self.description = <<-DESC
16
+ 修改pgyer中已经上传安装包的备注信息,终端运行:pindo pgyer apptest
17
+ DESC
18
+
19
+ self.arguments = [
20
+
21
+ ]
22
+
23
+ def self.options
24
+ [
25
+ ['--login', '强制再次登录pgyer网站'],
26
+ ['--proj', '指定哪个项目(忽略大小写空格等等字符),用法:pindo pgyer comment --proj=prancksoundv4'],
27
+ ['--list', '列出上传记录并选择,用法:pindo pgyer comment --list'],
28
+
29
+ ].concat(super)
30
+ end
31
+
32
+
33
+
34
+ def initialize(argv)
35
+
36
+ @args_login_flag = argv.flag?('login', false)
37
+ @args_list_flag = argv.flag?('list', false)
38
+ @args_proj_name = argv.option('proj')
39
+
40
+ super(argv)
41
+ @additional_args = argv.remainder!
42
+ end
43
+
44
+ def validate!
45
+ if @args_proj_name.nil?
46
+ xcodeproj_file_name = Dir.glob(File.join(Dir.pwd, "/*.xcodeproj")).max_by {|f| File.mtime(f)}
47
+ proj_name = File.basename(xcodeproj_file_name, ".xcodeproj") if xcodeproj_file_name
48
+ if !proj_name.nil?
49
+ puts
50
+ answer = agree("Pgyer的App项目代号是: #{proj_name} ?(Y/n)")
51
+ if answer
52
+ @args_proj_name = proj_name
53
+ end
54
+ end
55
+ end
56
+ super
57
+ end
58
+
59
+ def run
60
+
61
+ @pgyer_client = PgyerClient.new
62
+ app_info_obj = nil
63
+ login_success = @pgyer_client.do_login(force_login:@args_login_flag)
64
+ if login_success
65
+ PgyerHelper.share_instace.get_app_list_in_pgyer(client:@pgyer_client)
66
+ if !@args_proj_name.nil?
67
+ app_info_obj = PgyerHelper.share_instace.find_app_info_with_obj_list(proj_name:@args_proj_name)
68
+ end
69
+
70
+ if app_info_obj.nil?
71
+ proj_name = ask('请输入Pyger上的App代号(大小写空格忽略):') || nil
72
+ @args_proj_name = proj_name.strip
73
+ app_info_obj = PgyerHelper.share_instace.find_app_info_with_obj_list(proj_name:@args_proj_name)
74
+ end
75
+ end
76
+
77
+ if app_info_obj.nil?
78
+ raise Informative, "#{proj_name} 错误, 请输入正确的App代号名称, pgyer网站没有该App"
79
+ end
80
+
81
+
82
+ version_item_obj = PgyerHelper.share_instace.get_versioon_history_item(client:@pgyer_client, app_info_obj:app_info_obj, list_select_flat:@args_list_flag)
83
+
84
+ if version_item_obj.nil?
85
+ raise Informative, "没有找到上传记录"
86
+ end
87
+
88
+ PgyerHelper.share_instace.modify_coment(client:@pgyer_client, app_info_obj:app_info_obj, version_item_obj:version_item_obj)
89
+
90
+ end
91
+
92
+ end
93
+ end
94
+ end
95
+ end
@@ -0,0 +1,105 @@
1
+
2
+
3
+ require 'highline/import'
4
+ require 'fileutils'
5
+ require 'pindo/module/pgyerhelper.rb'
6
+
7
+
8
+ module Pindo
9
+ class Command
10
+ class Pgyer < Command
11
+ class Download < Pgyer
12
+
13
+
14
+ self.summary = '从pgyer下载指定app的安装包'
15
+
16
+ self.description = <<-DESC
17
+ 从pgyer下载指定app的安装包。终端直接运行:pindo pgyer download
18
+ DESC
19
+
20
+ self.arguments = [
21
+
22
+ ]
23
+
24
+ def self.options
25
+ [
26
+ ['--login', '强制再次登录pgyer网站'],
27
+ ['--list', '列出上传记录并选择,用法:pindo pgyer download --list'],
28
+ ['--proj', '指定哪个项目(忽略大小写空格等等字符),用法:pindo pgyer download --proj=prancksoundv4'],
29
+ ].concat(super)
30
+ end
31
+
32
+
33
+ def initialize(argv)
34
+
35
+ @args_login_flag = argv.flag?('login', false)
36
+ @args_list_flag = argv.flag?('list', false)
37
+ @args_proj_name = argv.option('proj')
38
+ @app_version_index = argv.option('index') || nil
39
+
40
+ super(argv)
41
+ @additional_args = argv.remainder!
42
+ end
43
+
44
+ def validate!
45
+ if @args_proj_name.nil?
46
+ xcodeproj_file_name = Dir.glob(File.join(Dir.pwd, "/*.xcodeproj")).max_by {|f| File.mtime(f)}
47
+ proj_name = File.basename(xcodeproj_file_name, ".xcodeproj") if xcodeproj_file_name
48
+ if !proj_name.nil?
49
+ puts
50
+ answer = agree("Pgyer的App项目代号是: #{proj_name} ?(Y/n)")
51
+ if answer
52
+ @args_proj_name = proj_name
53
+ end
54
+ end
55
+ end
56
+ super
57
+ end
58
+
59
+ def run
60
+
61
+ @pgyer_client = PgyerClient.new
62
+ app_info_obj = nil
63
+ login_success = @pgyer_client.do_login(force_login:@args_login_flag)
64
+ if login_success
65
+ PgyerHelper.share_instace.get_app_list_in_pgyer(client:@pgyer_client)
66
+ if !@args_proj_name.nil?
67
+ app_info_obj = PgyerHelper.share_instace.find_app_info_with_obj_list(proj_name:@args_proj_name)
68
+ end
69
+
70
+ if app_info_obj.nil?
71
+ proj_name = ask('请输入Pyger上的App代号(大小写空格忽略):') || nil
72
+ @args_proj_name = proj_name.strip
73
+ app_info_obj = PgyerHelper.share_instace.find_app_info_with_obj_list(proj_name:@args_proj_name)
74
+ end
75
+ end
76
+
77
+ if app_info_obj.nil?
78
+ raise Informative, "#{proj_name} 错误, 请输入正确的App代号名称, pgyer网站没有该App"
79
+ end
80
+
81
+ version_item_obj = PgyerHelper.share_instace.get_versioon_history_item(client:@pgyer_client, app_info_obj:app_info_obj, list_select_flat:@args_list_flag)
82
+
83
+ if version_item_obj.nil?
84
+ raise Informative, "没有找到上传记录"
85
+ end
86
+
87
+ download_url = version_item_obj["cdnUrl"]
88
+
89
+ base_name = [app_info_obj["appName"], version_item_obj["appVersion"], version_item_obj["incId"]].join("_")
90
+ base_name = base_name + File.extname(download_url)
91
+ # key_proj_name = proj_name.downcase.strip.gsub(/[\s\-_]/, '')
92
+ base_name = base_name.strip.gsub(/[\s]/, '').downcase
93
+ file_name = File.join(Dir.pwd, base_name)
94
+ puts "文件名: #{file_name}"
95
+ puts "下载中..."
96
+ File.binwrite(file_name, FastlaneCore::Helper.open_uri(download_url).read)
97
+ puts "下载完成!"
98
+
99
+
100
+ end
101
+
102
+ end
103
+ end
104
+ end
105
+ end