pindo 4.6.9 → 4.7.0

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 (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