pindo 4.6.9 → 4.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (140) hide show
  1. checksums.yaml +4 -4
  2. data/lib/pindo/base/aeshelper.rb +48 -2
  3. data/lib/pindo/base/funlog.rb +89 -0
  4. data/lib/pindo/base/githelper.rb +30 -12
  5. data/lib/pindo/base/plaininformative.rb +3 -0
  6. data/lib/pindo/base/standarderror.rb +1 -0
  7. data/lib/pindo/base/xcodeconst.rb +251 -0
  8. data/lib/pindo/client/applovinclient.rb +6 -3
  9. data/lib/pindo/client/aws3sclient.rb +33 -46
  10. data/lib/pindo/client/bossclient.rb +1 -1
  11. data/lib/pindo/client/pgyerclient.rb +78 -14
  12. data/lib/pindo/command/appstore/iap.rb +43 -0
  13. data/lib/pindo/command/appstore/itcapp.rb +41 -0
  14. data/lib/pindo/command/appstore/metadata.rb +43 -0
  15. data/lib/pindo/command/appstore/screenshots.rb +43 -0
  16. data/lib/pindo/command/appstore/upload.rb +40 -0
  17. data/lib/pindo/command/appstore.rb +17 -0
  18. data/lib/pindo/command/deploy/build.rb +109 -0
  19. data/lib/pindo/{deploy → command/deploy}/bundleid.rb +1 -1
  20. data/lib/pindo/command/deploy/cert.rb +179 -0
  21. data/lib/pindo/command/deploy/configproj.rb +105 -0
  22. data/lib/pindo/{deploy → command/deploy}/getitcinfo.rb +1 -1
  23. data/lib/pindo/{deploy → command/deploy}/iap.rb +30 -9
  24. data/lib/pindo/{deploy → command/deploy}/itcapp.rb +0 -1
  25. data/lib/pindo/{deploy → command/deploy}/itcinfo.rb +2 -3
  26. data/lib/pindo/{deploy → command/deploy}/pem.rb +3 -2
  27. data/lib/pindo/{deploy → command/deploy}/resign.rb +14 -63
  28. data/lib/pindo/command/deploy.rb +44 -0
  29. data/lib/pindo/{dev → command/dev}/autobuild.rb +17 -80
  30. data/lib/pindo/{dev → command/dev}/autoresign.rb +17 -64
  31. data/lib/pindo/{dev → command/dev}/createbuild.rb +0 -2
  32. data/lib/pindo/{dev → command/dev}/debug.rb +6 -2
  33. data/lib/pindo/command/dev/pgyercert.rb +75 -0
  34. data/lib/pindo/command/dev.rb +25 -0
  35. data/lib/pindo/command/env.rb +17 -0
  36. data/lib/pindo/{ipa → command/ipa}/autoresign.rb +18 -70
  37. data/lib/pindo/{ipa → command/ipa}/import.rb +47 -102
  38. data/lib/pindo/{ipa → command/ipa}/output.rb +38 -135
  39. data/lib/pindo/command/ipa.rb +16 -0
  40. data/lib/pindo/{lib → command/lib}/update.rb +19 -10
  41. data/lib/pindo/command/lib.rb +16 -0
  42. data/lib/pindo/{pgyer → command/pgyer}/apptest.rb +7 -29
  43. data/lib/pindo/{pgyer → command/pgyer}/comment.rb +7 -30
  44. data/lib/pindo/{pgyer → command/pgyer}/download.rb +35 -30
  45. data/lib/pindo/{pgyer → command/pgyer}/login.rb +3 -4
  46. data/lib/pindo/command/pgyer/resign.rb +111 -0
  47. data/lib/pindo/command/pgyer/upload.rb +123 -0
  48. data/lib/pindo/command/pgyer.rb +18 -0
  49. data/lib/pindo/{repo.rb → command/repo.rb} +4 -4
  50. data/lib/pindo/{utils → command/utils}/applovin.rb +43 -33
  51. data/lib/pindo/{utils → command/utils}/boss.rb +3 -3
  52. data/lib/pindo/command/utils/icon.rb +81 -0
  53. data/lib/pindo/{utils → command/utils}/renewproj.rb +1 -0
  54. data/lib/pindo/command/utils.rb +26 -0
  55. data/lib/pindo/command.rb +23 -26
  56. data/lib/pindo/module/build/swarkhelper.rb +95 -0
  57. data/lib/pindo/module/cert/certhelper.rb +176 -0
  58. data/lib/pindo/module/cert/keychainhelper.rb +138 -0
  59. data/lib/pindo/module/{pemcreate.rb → cert/pemhelper.rb} +3 -1
  60. data/lib/pindo/module/cert/provisioninghelper.rb +137 -0
  61. data/lib/pindo/module/cert/xcodecerthelper.rb +301 -0
  62. data/lib/pindo/module/{pgyerhelper.rb → pgyer/pgyerhelper.rb} +246 -35
  63. data/lib/pindo/module/xcode/xcodeappconfig.rb +188 -0
  64. data/lib/pindo/module/xcode/xcodebuildconfig.rb +12 -0
  65. data/lib/pindo/module/xcode/xcodebuildhelper.rb +312 -0
  66. data/lib/pindo/module/xcode/xcoderesconstant.rb +248 -0
  67. data/lib/pindo/module/xcode/xcodereshandler.rb +198 -0
  68. data/lib/pindo/module/xcode/xcodereshelper.rb +120 -0
  69. data/lib/pindo/options/appconfigoptions.rb +1 -0
  70. data/lib/pindo/options/deployoptions.rb +38 -41
  71. data/lib/pindo/version.rb +1 -1
  72. metadata +109 -97
  73. data/lib/pindo/deploy/Fastfile +0 -233
  74. data/lib/pindo/deploy/build.rb +0 -167
  75. data/lib/pindo/deploy/cert.rb +0 -508
  76. data/lib/pindo/deploy/configproj.rb +0 -89
  77. data/lib/pindo/deploy.rb +0 -44
  78. data/lib/pindo/dev.rb +0 -23
  79. data/lib/pindo/env/flutter.rb +0 -59
  80. data/lib/pindo/env/flutter.sh +0 -116
  81. data/lib/pindo/env.rb +0 -17
  82. data/lib/pindo/ipa.rb +0 -22
  83. data/lib/pindo/lib.rb +0 -18
  84. data/lib/pindo/module/buildconfighelper.rb +0 -13
  85. data/lib/pindo/module/buildhelper.rb +0 -76
  86. data/lib/pindo/module/config_project.sh +0 -143
  87. data/lib/pindo/module/configprojhelper.rb +0 -631
  88. data/lib/pindo/module/icon_contents.json +0 -116
  89. data/lib/pindo/module/imessage_icon.json +0 -91
  90. data/lib/pindo/module/imgset_contents.json +0 -21
  91. data/lib/pindo/module/launchimg_contents.json +0 -21
  92. data/lib/pindo/module/xcodebuildpre.rb +0 -258
  93. data/lib/pindo/pgyer/upload.rb +0 -234
  94. data/lib/pindo/pgyer.rb +0 -17
  95. data/lib/pindo/utils/icon.rb +0 -91
  96. data/lib/pindo/utils/icon.sh +0 -133
  97. data/lib/pindo/utils/podindex.rb +0 -56
  98. data/lib/pindo/utils/podindex.sh +0 -30
  99. data/lib/pindo/utils.rb +0 -29
  100. /data/lib/pindo/{deploy → command/deploy}/check.rb +0 -0
  101. /data/lib/pindo/{deploy → command/deploy}/confusecode.rb +0 -0
  102. /data/lib/pindo/{deploy → command/deploy}/confuseproj.rb +0 -0
  103. /data/lib/pindo/{deploy → command/deploy}/fabric.rb +0 -0
  104. /data/lib/pindo/{deploy → command/deploy}/initconfig.rb +0 -0
  105. /data/lib/pindo/{deploy → command/deploy}/pullconfig.rb +0 -0
  106. /data/lib/pindo/{deploy → command/deploy}/pushconfig.rb +0 -0
  107. /data/lib/pindo/{deploy → command/deploy}/quswark.rb +0 -0
  108. /data/lib/pindo/{deploy → command/deploy}/quswauth.rb +0 -0
  109. /data/lib/pindo/{deploy → command/deploy}/reportbug.rb +0 -0
  110. /data/lib/pindo/{deploy → command/deploy}/tag.rb +0 -0
  111. /data/lib/pindo/{deploy → command/deploy}/updateconfig.rb +0 -0
  112. /data/lib/pindo/{deploy → command/deploy}/uploadipa.rb +0 -0
  113. /data/lib/pindo/{dev → command/dev}/confusecode.rb +0 -0
  114. /data/lib/pindo/{dev → command/dev}/confuseproj.rb +0 -0
  115. /data/lib/pindo/{dev → command/dev}/pub.rb +0 -0
  116. /data/lib/pindo/{dev → command/dev}/renewcert.rb +0 -0
  117. /data/lib/pindo/{env → command/env}/dreamstudio.rb +0 -0
  118. /data/lib/pindo/{env → command/env}/quarkenv.rb +0 -0
  119. /data/lib/pindo/{env → command/env}/swarkenv.rb +0 -0
  120. /data/lib/pindo/{env → command/env}/workhard.rb +0 -0
  121. /data/lib/pindo/{lib → command/lib}/forcepush.rb +0 -0
  122. /data/lib/pindo/{lib → command/lib}/lint.rb +0 -0
  123. /data/lib/pindo/{lib → command/lib}/push.rb +0 -0
  124. /data/lib/pindo/{repo → command/repo}/clone.rb +0 -0
  125. /data/lib/pindo/{repo → command/repo}/create.rb +0 -0
  126. /data/lib/pindo/{repo → command/repo}/login.rb +0 -0
  127. /data/lib/pindo/{repo → command/repo}/search.rb +0 -0
  128. /data/lib/pindo/{setup.rb → command/setup.rb} +0 -0
  129. /data/lib/pindo/{upgrade.rb → command/upgrade.rb} +0 -0
  130. /data/lib/pindo/{utils → command/utils}/clearcert.rb +0 -0
  131. /data/lib/pindo/{utils → command/utils}/device.rb +0 -0
  132. /data/lib/pindo/{utils → command/utils}/tgate.rb +0 -0
  133. /data/lib/pindo/{utils → command/utils}/xcassets.rb +0 -0
  134. /data/lib/pindo/{utils → command/utils}/xcassets.sh +0 -0
  135. /data/lib/pindo/module/{appstore_in_app_purchase.rb → appstore/appstore_in_app_purchase.rb} +0 -0
  136. /data/lib/pindo/module/{appstore_metadata_connect_api_helper.rb → appstore/appstore_metadata_connect_api_helper.rb} +0 -0
  137. /data/lib/pindo/module/{appstore_metadata_fastlane_helper.rb → appstore/appstore_metadata_fastlane_helper.rb} +0 -0
  138. /data/lib/pindo/module/{iap_tier.json → appstore/iap_tier.json} +0 -0
  139. /data/lib/pindo/module/{commonconfuseproj.rb → build/commonconfuseproj.rb} +0 -0
  140. /data/lib/pindo/module/{xcodehelper.rb → xcode/xcodehelper.rb} +0 -0
@@ -12,6 +12,9 @@ module Pindo
12
12
 
13
13
  class PgyerHelper
14
14
 
15
+
16
+ include Pindo::Githelper
17
+
15
18
  class << self
16
19
  attr_writer :instance
17
20
  end
@@ -20,6 +23,172 @@ module Pindo
20
23
  @instance ||= new
21
24
  end
22
25
 
26
+
27
+ def initialize()
28
+ @force_login = false
29
+ @has_login = false
30
+ end
31
+
32
+ def setForeLogin(beforeLogin:nil)
33
+ @force_login = beforeLogin
34
+ end
35
+
36
+ def login
37
+ @pgyer_client = PgyerClient.new
38
+ if @force_login || !@has_login
39
+ @has_login = @pgyer_client.do_login(force_login:@force_login)
40
+ @force_login = false
41
+ end
42
+ return @has_login
43
+ end
44
+
45
+ def prepare_upload(working_directory:nil, proj_name:nil)
46
+ upload_proj_name = proj_name
47
+ app_info_obj = nil
48
+ if login
49
+
50
+ if !proj_name.nil?
51
+ app_info_obj = PgyerHelper.share_instace.find_app_info_with_obj_list(proj_name:upload_proj_name)
52
+ end
53
+
54
+ if !app_info_obj.nil?
55
+ return app_info_obj
56
+ end
57
+
58
+ proj_name_array = []
59
+ if File.exist?(File.join(working_directory, "config.json"))
60
+ config_json = JSON.parse(File.read(File.join(working_directory, "config.json")))
61
+ proj_name_array << config_json["project_info"]["project_name"]
62
+ end
63
+
64
+ xcodeproj_file_name = Dir.glob(File.join(Dir.pwd, "/*.xcodeproj")).max_by {|f| File.mtime(f)}
65
+ upload_proj_name = File.basename(xcodeproj_file_name, ".xcodeproj") if xcodeproj_file_name
66
+ if !upload_proj_name.nil? && !upload_proj_name.empty?
67
+ proj_name_array << upload_proj_name
68
+ end
69
+
70
+ puts
71
+ dir_base_name = File.basename(working_directory)
72
+ unless ["Desktop", "Documents", "Downloads"].include?(dir_base_name)
73
+ proj_name_array << dir_base_name
74
+ end
75
+
76
+ proj_name_array << "自定义输入Pyger上的App代号"
77
+
78
+ if proj_name_array.size > 1
79
+ cli = HighLine.new
80
+ upload_proj_name = cli.choose do |menu|
81
+ menu.prompt = "请选择对应的Pgyer App代号:"
82
+ menu.choices(*proj_name_array)
83
+ end
84
+ if upload_proj_name.include?("自定义输入")
85
+ upload_proj_name = ask('请输入对应Pyger上的App代号(大小写空格忽略):') || nil
86
+ upload_proj_name = upload_proj_name.strip
87
+ end
88
+ else
89
+ upload_proj_name = ask('请输入对应Pyger上的App代号(大小写空格忽略):') || nil
90
+ upload_proj_name = upload_proj_name.strip
91
+ end
92
+
93
+
94
+ app_info_obj = PgyerHelper.share_instace.find_app_info_with_obj_list(proj_name:upload_proj_name)
95
+
96
+ if app_info_obj.nil?
97
+ upload_proj_name = ask('请输入对应Pyger上的App代号(大小写空格忽略):') || nil
98
+ upload_proj_name = upload_proj_name.strip
99
+ app_info_obj = PgyerHelper.share_instace.find_app_info_with_obj_list(proj_name:upload_proj_name)
100
+ end
101
+
102
+ if app_info_obj.nil?
103
+ raise Informative, "#{upload_proj_name} 错误, 请输入正确的App代号, pgyer网站没有该App"
104
+ end
105
+ end
106
+ app_info_obj
107
+ end
108
+
109
+ def start_upload(app_info_obj:nil, ipa_file_upload:nil, description:nil)
110
+
111
+ args_ipa_file_dir = File.expand_path(File::dirname(ipa_file_upload))
112
+ ipa_file_upload=File.join(args_ipa_file_dir, File.basename(ipa_file_upload))
113
+
114
+ current_project_dir = Dir.pwd
115
+ puts "current_project_dir : #{current_project_dir}"
116
+ puts description
117
+ puts File.exist?(File.join(current_project_dir, ".git"))
118
+ if description.nil? && File.exist?(File.join(current_project_dir, ".git"))
119
+ commit_id_info = git_latest_commit_id(local_repo_dir:current_project_dir)
120
+ if commit_id_info
121
+ description = "commit " + commit_id_info
122
+ end
123
+ end
124
+
125
+ puts "description : #{description}"
126
+
127
+ addtach_file = nil
128
+ if ipa_file_upload.include?(File.join(current_project_dir, "build")) && File.exist?(File.join(current_project_dir, "VMData"))
129
+
130
+ server_file_directory = Dir.glob(File.join(current_project_dir, "VMData/Archives/*")).max_by {|f| File.mtime(f)}
131
+ zip_base_name = File.basename(server_file_directory)
132
+
133
+ server_zipfile_name = File.join(current_project_dir, "VMData", zip_base_name+".zip")
134
+
135
+ if File.exist?(server_zipfile_name)
136
+ FileUtils.rm_rf(server_zipfile_name)
137
+ end
138
+
139
+ Zip::File.open(server_zipfile_name, Zip::File::CREATE) do |zipfile|
140
+ Dir.chdir server_file_directory
141
+ Dir.glob("**/*").reject {|fn| File.directory?(fn) }.each do |file|
142
+ zipfile.add(file.sub(server_file_directory + '/', ''), file)
143
+ end
144
+ end
145
+
146
+ addtach_file = server_zipfile_name
147
+ Dir.chdir current_project_dir
148
+ end
149
+
150
+
151
+ puts
152
+ puts "上传项目: #{app_info_obj["appName"]}"
153
+ puts "上传备注: #{description}"
154
+
155
+
156
+ aws_client = AWSS3Client.new
157
+ upload_res = aws_client.upload_file(binary_file:ipa_file_upload)
158
+
159
+ attach_key_url = nil
160
+ attachFileUrls = []
161
+
162
+ begin
163
+ if !addtach_file.nil? && File.exist?(addtach_file)
164
+ puts "存在附件, 继续上传附件..."
165
+ attach_key_url = aws_client.upload_file(binary_file:addtach_file, isAttach:true)
166
+ end
167
+
168
+ if !attach_key_url.nil?
169
+ attachFileUrls << attach_key_url
170
+ end
171
+
172
+ rescue => error
173
+ puts "附件上传失败".bold.red
174
+ end
175
+
176
+ if !upload_res.nil? && !app_info_obj.nil?
177
+
178
+ puts attachFileUrls
179
+
180
+ result_data = @pgyer_client.post_app_update_binary(appId:app_info_obj["appId"], params:{
181
+ description: description,
182
+ s3Url: upload_res,
183
+ attachFileUrls:attachFileUrls
184
+ })
185
+
186
+ return result_data
187
+ end
188
+
189
+
190
+ end
191
+
23
192
  def get_user_local_wechat_url( )
24
193
 
25
194
  wechat_msg_url = nil
@@ -147,10 +316,15 @@ module Pindo
147
316
  end
148
317
 
149
318
  def find_app_info_with_obj_list(proj_name:nil)
319
+
150
320
  if proj_name.nil?
151
321
  return nil
152
322
  end
153
323
 
324
+ Funlog.instance.fancyinfo_start("正在拉取app信息列表,查找app信息...")
325
+
326
+ get_app_list_in_pgyer()
327
+
154
328
  key_proj_name = proj_name.downcase.strip.gsub(/[\s\-_]/, '')
155
329
 
156
330
  app_info_list = Pindoconfig.instance.get_pgyerapps_info_list()
@@ -159,12 +333,14 @@ module Pindo
159
333
  app_info_item_name.eql?(key_proj_name) && app_info_item["appType"].eql?("iOS")
160
334
  end
161
335
 
336
+ Funlog.instance.fancyinfo_success("拉取app信息列表完成,app信息获取成功!")
337
+
162
338
  app_info_obj
163
339
  end
164
340
 
165
- def get_app_version(client:nil, appId:nil, app_version_index:nil, latest_version:true)
341
+ def get_app_version(appId:nil, app_version_index:nil, latest_version:true)
166
342
 
167
- version_data = client.get_app_version_list_req(appId:appId)
343
+ version_data = @pgyer_client.get_app_version_list_req(appId:appId)
168
344
 
169
345
  version_item_obj = nil
170
346
  if latest_version
@@ -180,9 +356,9 @@ module Pindo
180
356
  return version_item_obj
181
357
  end
182
358
 
183
- def get_app_list_in_pgyer(client:nil)
359
+ def get_app_list_in_pgyer()
360
+
184
361
 
185
- puts "正在向pgyer拉取app信息列表, 查找app信息..."
186
362
  params = {
187
363
  pageNo:1,
188
364
  pageSize:1000
@@ -190,7 +366,7 @@ module Pindo
190
366
 
191
367
  app_info_list = Pindoconfig.instance.get_pgyerapps_info_list()
192
368
  if app_info_list.nil?
193
- res_data = client.get_app_list_req(params:params)
369
+ res_data = @pgyer_client.get_app_list_req(params:params)
194
370
  # puts JSON.pretty_generate(res_data)
195
371
  if !res_data["data"].nil? && res_data["data"].size > 0
196
372
  app_info_list = res_data["data"]
@@ -199,7 +375,7 @@ module Pindo
199
375
  end
200
376
 
201
377
  if app_info_list.nil?
202
- res_data = client.get_app_list_req(params:params)
378
+ res_data = @pgyer_client.get_app_list_req(params:params)
203
379
  # puts JSON.pretty_generate(res_data)
204
380
  if !res_data["data"].nil? && res_data["data"].size > 0
205
381
  app_info_list = res_data["data"]
@@ -208,15 +384,20 @@ module Pindo
208
384
  end
209
385
 
210
386
  if app_info_list.nil?
387
+ Funlog.instance.fancyinfo_error("拉取app信息列表失败!")
211
388
  raise Informative, "Pgyer网络数据异常!!!"
212
389
  end
390
+
391
+
213
392
  return app_info_list
214
393
  end
215
394
 
216
- def get_versioon_history_item(client:nil, app_info_obj:nil, list_select_flat:false)
395
+ def get_versioon_history_item(app_info_obj:nil, list_select_flat:false)
396
+
397
+ Funlog.instance.fancyinfo_start("正在拉取app上传记录...")
217
398
 
218
399
  appId = app_info_obj["appId"]
219
- version_data = client.get_app_version_list_req(appId:appId) || {}
400
+ version_data = @pgyer_client.get_app_version_list_req(appId:appId) || {}
220
401
 
221
402
  if version_data["data"].nil? || version_data["data"].size <=0
222
403
  raise Informative, "#{proj_name} 错误, 没有找到上传记录"
@@ -240,10 +421,11 @@ module Pindo
240
421
  version_array_temp.each do |item|
241
422
  puts "版本:#{item["appVersion"]} Build号:#{item["incId"]} bundleId:#{item["bundleId"]} 上传时间:#{item["updateTime"]}"
242
423
  end
243
- puts
244
424
  app_incId_index = ask('请选择上面的Build号:')
245
425
 
246
426
  end
427
+
428
+ Funlog.instance.fancyinfo_success("拉取app上传记录完成!")
247
429
 
248
430
  version_item_obj = nil
249
431
  if !app_incId_index.nil?
@@ -252,6 +434,7 @@ module Pindo
252
434
  version_item_obj = version_data["data"].find{ |item| item["latest"]}
253
435
  end
254
436
 
437
+
255
438
  version_item_obj
256
439
 
257
440
  end
@@ -277,7 +460,7 @@ module Pindo
277
460
  return comment_str
278
461
  end
279
462
 
280
- def modify_coment(client:nil, app_info_obj:nil, version_item_obj:nil)
463
+ def modify_coment(app_info_obj:nil, version_item_obj:nil)
281
464
 
282
465
  comment_str = get_description()
283
466
  puts
@@ -300,36 +483,64 @@ module Pindo
300
483
  raise Informative, "暂停修改!!"
301
484
  end
302
485
 
303
- client.post_update_upload_comment(appId:app_info_obj["appId"], id:version_item_obj["id"], comment:comment_str.strip)
486
+ @pgyer_client.post_update_upload_comment(appId:app_info_obj["appId"], id:version_item_obj["id"], comment:comment_str.strip)
304
487
 
305
488
  puts "备注信息修改成功!!"
306
489
 
307
490
  end
308
491
 
309
- def make_msg_data(app_info_obj:nil, app_version_info_obj:nil, msg_from: nil)
310
-
311
- app_name = app_info_obj["appName"]
312
- download_password = app_info_obj["password"]
313
- download_url = app_info_obj["downloadUrl"] + "?" + "id=" + app_version_info_obj["id"]
314
- bundle_id = app_version_info_obj["bundleId"]
315
- app_version = app_version_info_obj["appVersion"]
316
- index_num = app_version_info_obj["incId"]
317
- time = app_version_info_obj["updateTime"]
318
- description = app_version_info_obj["description"]
319
- msg_from = msg_from || " "
320
- msg_data ={
321
- app_name: app_name,
322
- download_password: download_password,
323
- download_url: download_url,
324
- bundle_id: bundle_id,
325
- app_version: app_version,
326
- index_num: index_num,
327
- time: time,
328
- description: description,
329
- msg_from:msg_from
330
- }
331
-
332
- return msg_data
492
+ def get_cert_list( )
493
+
494
+ Funlog.instance.fancyinfo_start("正在获取可用证书...")
495
+ result = @pgyer_client.get_cert_list()
496
+
497
+ Funlog.instance.fancyinfo_success("获取可用证书完成!")
498
+ return result["data"]
499
+
500
+ end
501
+
502
+ def resign(version_id:nil, cert_id:nil)
503
+
504
+ Funlog.instance.fancyinfo_start("正在重签名...")
505
+ result = @pgyer_client.post_resign(appVersionId:version_id, certId:cert_id)
506
+ if !result.nil? && result["code"] == 200 && result["data"] == "success"
507
+ Funlog.instance.fancyinfo_success("重签名成功!")
508
+ return true
509
+ else
510
+ Funlog.instance.fancyinfo_error("重签名失败!")
511
+ return false
512
+ end
513
+
514
+ end
515
+
516
+
517
+
518
+ def make_msg_data(app_info_obj:nil, app_version_info_obj:nil)
519
+
520
+ msg_from = @pgyer_client.token["username"]
521
+
522
+ app_name = app_info_obj["appName"]
523
+ download_password = app_info_obj["password"]
524
+ download_url = app_info_obj["downloadUrl"] + "?" + "id=" + app_version_info_obj["id"]
525
+ bundle_id = app_version_info_obj["bundleId"]
526
+ app_version = app_version_info_obj["appVersion"]
527
+ index_num = app_version_info_obj["incId"]
528
+ time = app_version_info_obj["updateTime"]
529
+ description = app_version_info_obj["description"]
530
+ msg_from = msg_from || " "
531
+ msg_data ={
532
+ app_name: app_name,
533
+ download_password: download_password,
534
+ download_url: download_url,
535
+ bundle_id: bundle_id,
536
+ app_version: app_version,
537
+ index_num: index_num,
538
+ time: time,
539
+ description: description,
540
+ msg_from:msg_from
541
+ }
542
+
543
+ return msg_data
333
544
 
334
545
  end
335
546
 
@@ -0,0 +1,188 @@
1
+ require 'fileutils'
2
+ require 'xcodeproj'
3
+ require 'json'
4
+
5
+ module Pindo
6
+
7
+ module XcodeAppConfig
8
+
9
+ def auto_increase_buildnumber(app_config_file:nil)
10
+
11
+ if !File.exist?(app_config_file)
12
+ config_json = JSON.parse(File.read(app_config_file))
13
+ app_version = config_json['app_info']['app_version']
14
+ app_build_version = config_json['app_info']['app_build_version']
15
+
16
+ app_version_array = app_version.split('.') || []
17
+ app_build_version_array = app_build_version.split('.') || []
18
+
19
+ while app_build_version_array.size < app_version_array.size + 1 do
20
+ app_version_array << "0"
21
+ end
22
+
23
+ last_numer = app_build_version_array.pop.to_s
24
+ new_last_numer = last_numer.to_i + 1
25
+ app_build_version_array << new_last_numer.to_s
26
+ app_build_version = app_build_version_array.join(".")
27
+
28
+ config_json['app_info']['app_build_version'] = app_build_version
29
+ File.open(app_origin_config, "w") do |file|
30
+ file.write(JSON.pretty_generate(config_json))
31
+ file.close
32
+ end
33
+ end
34
+ end
35
+
36
+ def add_project_modue(project_dir:nil, proj_name:nil, config_json:nil)
37
+
38
+ module_dict = config_json['project_info']['project_module']
39
+ if !module_dict.nil?
40
+ module_dict.each do |key, module_item|
41
+ # puts module_item
42
+ # puts module_item['module_type']
43
+ if module_item && module_item['module_type'] = 'pod'
44
+ add_pod_modue(project_dir:project_dir, pod_name:key, pod_version:module_item['module_git_tag'])
45
+ elsif module_item && module_item['module_type'] = 'sub_git'
46
+
47
+ elsif module_item && module_item['module_type'] = 'package'
48
+
49
+ end
50
+ end
51
+ end
52
+
53
+ end
54
+ def remove_test_pod_modue(project_dir:nil)
55
+
56
+ pod_file = File.join(project_dir, "Podfile")
57
+
58
+ command = 'sed -i "" "/.*' + "FancySettingsPlugin" +'.*/d" ' + pod_file
59
+ system command
60
+
61
+ command = 'sed -i "" "/.*' + "TYSettingsPlugin" +'.*/d" ' + pod_file
62
+ system command
63
+
64
+ command = 'sed -i "" "/.*' + "CSSettingsPlugin" +'.*/d" ' + pod_file
65
+ system command
66
+
67
+ command = 'sed -i "" "/.*' + "FunnySettingsPlugin" +'.*/d" ' + pod_file
68
+ system command
69
+ end
70
+
71
+ def add_pod_modue(project_dir:nil, pod_name:nil, pod_version:nil)
72
+
73
+ puts "Modify App Podfile: "
74
+ # if File.exist?(File.join(project_dir, "Podfile.lock"))
75
+ # FileUtils.rm_rf(File.join(project_dir, "Podfile.lock"))
76
+ # end
77
+
78
+ pod_file = File.join(project_dir, "Podfile")
79
+
80
+ command = 'sed -i "" "/.*' + "AppSource" +'.*/d" ' + pod_file
81
+ system command
82
+
83
+ command = 'sed -i "" "/.*' + "QuarkData" +'.*/d" ' + pod_file
84
+ system command
85
+
86
+ command = 'sed -i "" "/.*' + "VMData" +'.*/d" ' + pod_file
87
+ system command
88
+
89
+ command = 'sed -i "" "/.*' + pod_name +'.*/d" ' + pod_file
90
+ system command
91
+
92
+ if File.exist?(File.join(project_dir, "Podfile"))
93
+ puts " #{pod_name} #{pod_version}"
94
+ text = File.read(File.join(project_dir, "Podfile"))
95
+
96
+ if pod_version.nil? || pod_version == "" || pod_version.empty?
97
+
98
+ if text.include?("FirebaseAnalytics")
99
+ new_contents = text.gsub!(/\'FirebaseAnalytics\'.*$/, "\'FirebaseAnalytics\'\r\n pod \'#{pod_name}\' ")
100
+ elsif text.include?("UMCommon")
101
+ new_contents = text.gsub!(/\'UMCommon\'.*$/, "\'UMCommon\'\r\n pod \'#{pod_name}\' ")
102
+ end
103
+ else
104
+ if text.include?("FirebaseAnalytics")
105
+ new_contents = text.gsub!(/\'FirebaseAnalytics\'.*$/, "\'FirebaseAnalytics\'\r\n pod \'#{pod_name}\', \'#{pod_version}\' ")
106
+ elsif text.include?("UMCommon")
107
+ new_contents = text.gsub!(/\'UMCommon\'.*$/, "\'UMCommon\'\r\n pod \'#{pod_name}\', \'#{pod_version}\' ")
108
+ end
109
+ end
110
+ File.open(File.join(project_dir, "Podfile"), "w") {|file| file.puts new_contents }
111
+ end
112
+ end
113
+
114
+
115
+ def find_group(group:nil, group_name:nil)
116
+
117
+ if group.display_name == group_name
118
+ return group
119
+ else
120
+ if group.children.count > 0
121
+ group.children.each do |child|
122
+ if Xcodeproj::Project::Object::PBXGroup == child.class
123
+ result = find_group(group:child, group_name:group_name)
124
+ if !result.nil?
125
+ return result
126
+ end
127
+ end
128
+ end
129
+ end
130
+
131
+ end
132
+
133
+ return nil
134
+ end
135
+
136
+
137
+ def modify_appprefix_plist(project_dir:nil, appprefix_file:nil, config_json:nil)
138
+
139
+ project_fullname = Dir.glob(File.join(project_dir, "/*.xcodeproj")).max_by {|f| File.mtime(f)}
140
+ project_obj = Xcodeproj::Project.open(project_fullname)
141
+ presources_group = find_group(group:project_obj.main_group, group_name:"PResources")
142
+
143
+ if presources_group.nil?
144
+ raise Informative, "没有找到资源目录PResources!!!!"
145
+ end
146
+
147
+ presources_path = presources_group.real_path
148
+
149
+ config_file = Dir.glob(File.join(presources_path, "**", appprefix_file)).first
150
+ if config_file.nil? || config_file.empty? || !File.exist?(config_file)
151
+ raise Informative, "工程本地配置未修改,PResources/目录下没有找到对应的配置文件 #{appprefix_file} !!!!"
152
+ end
153
+
154
+
155
+ config_json['app_setting'].each do |key, value|
156
+ # puts value
157
+ if !value.nil? && value.to_s.include?("__________config")
158
+ raise Informative, "config.json 配置文件key : #{key} 包含初始值未修改, 配置正确的值或者删除!!!"
159
+ end
160
+ end
161
+
162
+ xcode_config_value = nil
163
+ if config_file.end_with?(".plist") then
164
+ xcode_config_value = Xcodeproj::Plist.read_from_path(config_file)
165
+ else
166
+ xcode_config_value=JSON.parse(File.read(config_file))
167
+ end
168
+
169
+ new_info_plist_dict = {}
170
+ xcode_config_value.each do |key, value|
171
+ if !config_json['app_setting'][key].nil? && config_json['app_setting'][key] != ""
172
+ new_info_plist_dict[key] = config_json['app_setting'][key]
173
+ else
174
+ new_info_plist_dict[key] = value
175
+ end
176
+ end
177
+
178
+ if config_file.end_with?(".plist") then
179
+ Xcodeproj::Plist.write_to_path(new_info_plist_dict, config_file)
180
+ else
181
+ File.open(config_file, "w") do |f|
182
+ f.write(JSON.pretty_generate(new_info_plist_dict))
183
+ end
184
+ end
185
+ end
186
+
187
+ end
188
+ end
@@ -0,0 +1,12 @@
1
+ require 'fileutils'
2
+ require 'xcodeproj'
3
+ require 'json'
4
+
5
+ module Pindo
6
+
7
+ class XcodeBuildConfig
8
+
9
+
10
+ end
11
+
12
+ end