pindo 4.6.9

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 (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,338 @@
1
+ require 'highline/import'
2
+ require 'xcodeproj'
3
+ require 'find'
4
+ require 'fileutils'
5
+ require 'sigh'
6
+ require 'zip'
7
+
8
+ module Pindo
9
+ class Command
10
+ class Deploy < Command
11
+ class Resign < Deploy
12
+
13
+
14
+ extend Plistbuddyexecutable
15
+ plistbuddyexecutable :plistbuddy
16
+
17
+ extend Executable
18
+ executable :security
19
+
20
+ include Command::DeployOptions
21
+
22
+ self.summary = '重签名ipa'
23
+
24
+ self.description = <<-DESC
25
+ 重签名ipa.
26
+ DESC
27
+
28
+ self.arguments = [
29
+ CLAide::Argument.new('path/to/config.json', true),
30
+ ]
31
+
32
+ def self.options
33
+ [
34
+ ['--ipa=', 'iap file name.']
35
+ ].concat(super)
36
+ end
37
+
38
+ def initialize(argv)
39
+
40
+ @ipa_file_name = argv.option('ipa')
41
+ super
42
+
43
+
44
+ @build_type = "appstore"
45
+ if @args_adhoc_flag
46
+ @build_type = "adhoc"
47
+ end
48
+ if @args_dev_flag
49
+ @build_type = "development"
50
+ end
51
+
52
+ end
53
+
54
+ def run
55
+
56
+
57
+ args_temp = []
58
+ args = get_build_type_args()
59
+ args_temp = args_temp | args
60
+
61
+
62
+ Pindo::Command::Deploy::Cert::run(args_temp)
63
+
64
+ if @ipa_file_name
65
+ new_ipa_filename = File.expand_path(@ipa_file_name)
66
+ else
67
+ current_dir = Dir.pwd
68
+ new_project_fullname = ""
69
+ Dir.foreach(current_dir) do |file|
70
+ if file =~ /(.*).ipa/
71
+ new_ipa_filename = File.join(current_dir, file)
72
+ break;
73
+ end
74
+ end
75
+ end
76
+ if new_ipa_filename && new_ipa_filename != "" then
77
+ resign_ipa_name = get_resign_ipa_name(ipa_name: new_ipa_filename)
78
+ sign_ipa_with_new_cert(ipa_name: resign_ipa_name)
79
+ end
80
+
81
+
82
+ end
83
+
84
+ def modify_ipa_info_plist(modify_content_path: nil)
85
+
86
+
87
+ main_info_plist = File.join(modify_content_path, "Info.plist")
88
+ puts main_info_plist
89
+
90
+ if !File.exist?("/usr/local/bin/PlistBuddy")
91
+ command = 'ln -s /usr/libexec/PlistBuddy /usr/local/bin/PlistBuddy'
92
+ system command
93
+ end
94
+
95
+ old_bundle_id_command = '/usr/local/bin/PlistBuddy -c "Print :CFBundleIdentifier" ' +main_info_plist
96
+ puts old_bundle_id_command
97
+ old_bundle_id = ""
98
+ IO.popen(old_bundle_id_command) { |f| old_bundle_id = f.gets }
99
+ puts old_bundle_id
100
+
101
+
102
+ exchange_bundleid_command = '/usr/local/bin/PlistBuddy -c "Set :CFBundleIdentifier ' + @bundle_id + '" ' + main_info_plist
103
+ puts exchange_bundleid_command
104
+ system exchange_bundleid_command
105
+
106
+ plugin_path = File.join(modify_content_path, "PlugIns")
107
+ if File.exist?(plugin_path)
108
+ Dir.foreach(plugin_path) do |file|
109
+ if file =~ /(.*).appex/
110
+
111
+ appex_path = File.join(plugin_path, file);
112
+ tmp_info_plist = File.join(appex_path, "Info.plist");
113
+
114
+ old_bundle_id_command = '/usr/local/bin/PlistBuddy -c "Print :CFBundleIdentifier" ' +tmp_info_plist
115
+ puts old_bundle_id_command
116
+ old_plugin_bundle_id = ""
117
+ IO.popen(old_bundle_id_command) { |f| old_plugin_bundle_id = f.gets }
118
+ puts old_plugin_bundle_id
119
+
120
+ puts "puts old_bundle_id = #{old_plugin_bundle_id}"
121
+ if old_plugin_bundle_id.include?(".content")
122
+ new_plugin_bundle_id = @bundle_id + ".content"
123
+ exchange_bundleid_command = '/usr/local/bin/PlistBuddy -c "Set :CFBundleIdentifier ' + new_plugin_bundle_id + '" ' + tmp_info_plist
124
+ puts exchange_bundleid_command
125
+ system exchange_bundleid_command
126
+ end
127
+
128
+ if old_plugin_bundle_id.include?(".service")
129
+ new_plugin_bundle_id = @bundle_id + ".service"
130
+ exchange_bundleid_command = '/usr/local/bin/PlistBuddy -c "Set :CFBundleIdentifier ' + new_plugin_bundle_id + '" ' + tmp_info_plist
131
+ puts exchange_bundleid_command
132
+ system exchange_bundleid_command
133
+ end
134
+
135
+ if old_plugin_bundle_id.include?(".imessage")
136
+ new_plugin_bundle_id = @bundle_id + ".imessage"
137
+ exchange_bundleid_command = '/usr/local/bin/PlistBuddy -c "Set :CFBundleIdentifier ' + new_plugin_bundle_id + '" ' + tmp_info_plist
138
+ puts exchange_bundleid_command
139
+ system exchange_bundleid_command
140
+ end
141
+
142
+ if old_plugin_bundle_id.include?(".keyboard")
143
+ new_plugin_bundle_id = @bundle_id + ".keyboard"
144
+ exchange_bundleid_command = '/usr/local/bin/PlistBuddy -c "Set :CFBundleIdentifier ' + new_plugin_bundle_id + '" ' + tmp_info_plist
145
+ puts exchange_bundleid_command
146
+ system exchange_bundleid_command
147
+ end
148
+
149
+ if old_plugin_bundle_id.include?(".siri")
150
+ new_plugin_bundle_id = @bundle_id + ".siri"
151
+ exchange_bundleid_command = '/usr/local/bin/PlistBuddy -c "Set :CFBundleIdentifier ' + new_plugin_bundle_id + '" ' + tmp_info_plist
152
+ puts exchange_bundleid_command
153
+ system exchange_bundleid_command
154
+ end
155
+
156
+ if old_plugin_bundle_id.include?(".widget")
157
+ new_plugin_bundle_id = @bundle_id + ".widget"
158
+ exchange_bundleid_command = '/usr/local/bin/PlistBuddy -c "Set :CFBundleIdentifier ' + new_plugin_bundle_id + '" ' + tmp_info_plist
159
+ puts exchange_bundleid_command
160
+ system exchange_bundleid_command
161
+ end
162
+
163
+ if old_plugin_bundle_id.include?(".siriui")
164
+ new_plugin_bundle_id = @bundle_id + ".siriui"
165
+ exchange_bundleid_command = '/usr/local/bin/PlistBuddy -c "Set :CFBundleIdentifier ' + new_plugin_bundle_id + '" ' + tmp_info_plist
166
+ puts exchange_bundleid_command
167
+ system exchange_bundleid_command
168
+ end
169
+
170
+
171
+ if old_plugin_bundle_id.include?(".extension")
172
+ new_plugin_bundle_id = @bundle_id + ".extension"
173
+ exchange_bundleid_command = '/usr/local/bin/PlistBuddy -c "Set :CFBundleIdentifier ' + new_plugin_bundle_id + '" ' + tmp_info_plist
174
+ puts exchange_bundleid_command
175
+ system exchange_bundleid_command
176
+ end
177
+
178
+ if old_plugin_bundle_id.include?(".extensionad")
179
+ new_plugin_bundle_id = @bundle_id + ".extensionad"
180
+ exchange_bundleid_command = '/usr/local/bin/PlistBuddy -c "Set :CFBundleIdentifier ' + new_plugin_bundle_id + '" ' + tmp_info_plist
181
+ puts exchange_bundleid_command
182
+ system exchange_bundleid_command
183
+ end
184
+
185
+ if old_plugin_bundle_id.include?(".extensionporn")
186
+ new_plugin_bundle_id = @bundle_id + ".extensionporn"
187
+ exchange_bundleid_command = '/usr/local/bin/PlistBuddy -c "Set :CFBundleIdentifier ' + new_plugin_bundle_id + '" ' + tmp_info_plist
188
+ puts exchange_bundleid_command
189
+ system exchange_bundleid_command
190
+ end
191
+
192
+
193
+ end
194
+ end
195
+
196
+ end
197
+
198
+ end
199
+
200
+ def get_resign_ipa_name(ipa_name: nil)
201
+
202
+ ipa_base_name = File.basename(ipa_name, ".ipa")
203
+ ipa_dir = File.dirname(ipa_name)
204
+
205
+ resign_ipa_name = ipa_base_name + "_resigned.ipa"
206
+ resign_ipa_full_name = File.join(ipa_dir, resign_ipa_name)
207
+ FileUtils.cp_r(ipa_name, resign_ipa_full_name)
208
+ puts resign_ipa_full_name
209
+
210
+ tmp_time = "tmp_" +Time.now.strftime('%y%m%d_%H%M%S')
211
+ tmp_dir = File.join(ipa_dir, tmp_time)
212
+ if !File.exist?(tmp_dir)
213
+ FileUtils.mkdir(tmp_dir)
214
+ end
215
+
216
+ command = "unzip -q \"#{resign_ipa_full_name}\" -d #{tmp_dir}"
217
+
218
+ puts command
219
+ system command
220
+
221
+ payload_path = File.join(tmp_dir, "Payload")
222
+ if File.exist?(payload_path)
223
+ FileUtils.rm_rf(resign_ipa_full_name)
224
+ end
225
+
226
+
227
+ modify_content_path = ""
228
+ Dir.foreach(payload_path) do |file|
229
+ if file =~ /(.*).app/
230
+ modify_content_path = File.join(payload_path, file);
231
+ break;
232
+ end
233
+ end
234
+
235
+ modify_ipa_info_plist(modify_content_path:modify_content_path)
236
+
237
+ current_dir = Dir.pwd
238
+ if File.exist?(payload_path)
239
+ Dir.chdir(tmp_dir)
240
+ command = "zip -qry \"#{resign_ipa_full_name}\" * "
241
+ puts command
242
+ system command
243
+ Dir.chdir(current_dir)
244
+ end
245
+
246
+ if File.exist?(resign_ipa_full_name)
247
+ FileUtils.rm_rf(tmp_dir)
248
+ end
249
+
250
+ return resign_ipa_full_name
251
+ end
252
+
253
+ def sign_ipa_with_new_cert(ipa_name: nil)
254
+
255
+ bundle_id_dict = pindo_single_config.get_cert_info
256
+ bundle_id_signing_identity = bundle_id_dict["bundle_id_cert_common_name"]
257
+ puts "bundle_id_signing_identity : #{bundle_id_signing_identity}"
258
+
259
+ profile_dict = resign_profile_dict()
260
+
261
+ puts
262
+ puts "profile_dict :"
263
+ puts
264
+ puts profile_dict
265
+
266
+
267
+ # resign(ipa, signing_identity, provisioning_profiles, entitlements, ççç, display_name, short_version, bundle_version, new_bundle_id, use_app_entitlements, keychain_path)
268
+
269
+ Sigh::Resign.resign(ipa_name, bundle_id_signing_identity, profile_dict, nil, nil, nil, nil, nil, @bundle_id, true, nil)
270
+
271
+ end
272
+
273
+
274
+ def extract_zip(file, destination)
275
+ FileUtils.mkdir_p(destination)
276
+ Zip::File.open(file) do |zip_file|
277
+ zip_file.each do |f|
278
+ fpath = File.join(destination, f.name)
279
+ zip_file.extract(f, fpath) unless File.exist?(fpath)
280
+ end
281
+ end
282
+ end
283
+
284
+ def resign_profile_dict
285
+
286
+ bundle_id_dict = pindo_single_config.get_cert_info
287
+
288
+ resign_dict = {}
289
+ resign_dict[@bundle_id] = bundle_id_dict['bundle_id']['bundle_id_profile_path']
290
+
291
+ if @bundle_id_pushcontent then
292
+ resign_dict[@bundle_id_pushcontent] = bundle_id_dict['bundle_id_pushcontent']['bundle_id_pushcontent_profile_path']
293
+ end
294
+
295
+ if @bundle_id_pushservice then
296
+ resign_dict[@bundle_id_pushservice] = bundle_id_dict['bundle_id_pushservice']['bundle_id_pushservice_profile_path']
297
+ end
298
+
299
+ if @bundle_id_keyboard then
300
+ resign_dict[@bundle_id_keyboard] = bundle_id_dict['bundle_id_keyboard']['bundle_id_keyboard_profile_path']
301
+ end
302
+
303
+ if @bundle_id_imessage then
304
+ resign_dict[@bundle_id_imessage] = bundle_id_dict['bundle_id_imessage']['bundle_id_imessage_profile_path']
305
+ end
306
+
307
+ if @bundle_id_siri then
308
+ resign_dict[@bundle_id_siri] = bundle_id_dict['bundle_id_siri']['bundle_id_siri_profile_path']
309
+ end
310
+
311
+ if @bundle_id_siriui then
312
+ resign_dict[@bundle_id_siriui] = bundle_id_dict['bundle_id_siriui']['bundle_id_siriui_profile_path']
313
+ end
314
+
315
+ if @bundle_id_widget then
316
+ resign_dict[@bundle_id_widget] = bundle_id_dict['bundle_id_widget']['bundle_id_widget_profile_path']
317
+ end
318
+
319
+ if @bundle_id_extension then
320
+ resign_dict[@bundle_id_extension] = bundle_id_dict['bundle_id_extension']['bundle_id_extension_profile_path']
321
+ end
322
+
323
+ if @bundle_id_extensionad then
324
+ resign_dict[@bundle_id_extensionad] = bundle_id_dict['bundle_id_extensionad']['bundle_id_extensionad_profile_path']
325
+ end
326
+
327
+ if @bundle_id_extensionpron then
328
+ resign_dict[@bundle_id_extensionpron] = bundle_id_dict['bundle_id_extensionpron']['bundle_id_extensionpron_profile_path']
329
+ end
330
+
331
+ return resign_dict
332
+
333
+ end
334
+
335
+ end
336
+ end
337
+ end
338
+ end
@@ -0,0 +1,108 @@
1
+
2
+ require 'fileutils'
3
+
4
+ module Pindo
5
+ class Command
6
+ class Deploy < Command
7
+ class Tag < Deploy
8
+
9
+
10
+ include Command::DeployOptions
11
+
12
+ self.summary = '发布完成创建tag'
13
+
14
+ self.description = <<-DESC
15
+ 发布完成创建tag
16
+ DESC
17
+
18
+ self.arguments = [
19
+ CLAide::Argument.new('path/to/config.json', true),
20
+ ]
21
+
22
+ def self.options
23
+ [
24
+ ['--d', '删除当前tag']
25
+ ].concat(super)
26
+ end
27
+
28
+ def initialize(argv)
29
+ @delete_tag_name = argv.option('d')
30
+ super
31
+ end
32
+
33
+ def run
34
+
35
+ pindo_new_project_dir = Dir.pwd
36
+ pindo_dir = File::expand_path(pindo_single_config.pindo_dir)
37
+ app_config_dir = File.join(pindo_dir, @deploy_identifier)
38
+
39
+
40
+ if !@delete_tag_name.nil?
41
+ result = remove_tag(local_repo_dir:pindo_new_project_dir, tag_name:@delete_tag_name)
42
+ if result
43
+ puts
44
+ puts "代码仓库路径#{pindo_new_project_dir}"
45
+ puts "已删除tag : #{@delete_tag_name}"
46
+ puts
47
+ puts
48
+ end
49
+
50
+ result = remove_tag(local_repo_dir:app_config_dir, tag_name:@delete_tag_name)
51
+ if result
52
+ puts
53
+ puts "配置仓库路径#{app_config_dir}"
54
+ puts "已删除tag : #{@delete_tag_name}"
55
+ puts
56
+ puts
57
+ end
58
+ end
59
+
60
+
61
+ time_str = Time.now.strftime('%y%m%d') + "_"
62
+ if @config_json && @config_json["app_info"] && @config_json["app_info"]["app_version"]
63
+ temp_version = @config_json["app_info"]["app_version"]
64
+ end
65
+ tag_name = "ios_release_" + temp_version
66
+ puts tag_name
67
+
68
+ remove_tag(local_repo_dir:pindo_new_project_dir, tag_name:tag_name)
69
+ result = add_tag(local_repo_dir:pindo_new_project_dir, tag_name:tag_name)
70
+ if result
71
+ puts
72
+ puts "代码仓库路径#{pindo_new_project_dir}"
73
+ puts "已添加tag : #{tag_name}"
74
+ puts
75
+ puts
76
+ end
77
+
78
+ remove_tag(local_repo_dir:app_config_dir, tag_name:tag_name)
79
+ result = add_tag(local_repo_dir:app_config_dir, tag_name:tag_name)
80
+
81
+ if result
82
+ puts
83
+ puts "配置仓库路径#{app_config_dir}"
84
+ puts "已添加tag : #{tag_name}"
85
+ puts
86
+ puts
87
+ end
88
+
89
+ # branch_name = "branch_" + temp_version
90
+ # puts branch_name
91
+
92
+ # add_branch(local_repo_dir: pindo_new_project_dir, branch: branch_name)
93
+ # git!(%W(-C #{pindo_new_project_dir} checkout master))
94
+ # remove_branch(local_repo_dir: pindo_new_project_dir, branch: branch_name)
95
+
96
+
97
+
98
+ end
99
+
100
+
101
+
102
+
103
+
104
+ end
105
+ end
106
+ end
107
+ end
108
+
@@ -0,0 +1,129 @@
1
+ require 'highline/import'
2
+ require 'fileutils'
3
+ require 'json'
4
+ require 'highline'
5
+
6
+ module Pindo
7
+ class Command
8
+ class Deploy < Command
9
+ class Updateconfig < Deploy
10
+
11
+ include Command::DeployOptions
12
+ include Hashhelper
13
+ include Appselect
14
+
15
+ self.summary = '根据模板更新发布配置的版本'
16
+ self.description = <<-DESC
17
+ 根据模板更新发布配置的版本
18
+ DESC
19
+
20
+ self.arguments = [
21
+ CLAide::Argument.new('path/to/config.json', true),
22
+ ]
23
+
24
+ def run
25
+
26
+ update_common_struct
27
+
28
+
29
+ end
30
+
31
+
32
+ def update_common_struct
33
+ app_default_config_dir = clong_buildconfig_repo(repo_name: pindo_single_config.demo_bundle_id)
34
+ default_config_file = File.join(app_default_config_dir, "config.json")
35
+ default_config_json = nil
36
+ if !default_config_file.empty? && File::file?(default_config_file)
37
+ default_config_json=JSON.parse(File.read(default_config_file))
38
+ unless default_config_json
39
+ puts "Default json not found !!!"
40
+ end
41
+ else
42
+ puts "Default json not found !!!"
43
+ end
44
+
45
+ puts "\n\n=========用新模板更新后的config=============="
46
+ empty_new_config = deepcopy_hash_struct(src_hash:default_config_json, key_value:"__________config_")
47
+ new_config_json = init_hash_value_wihtout_add_key(hash1:empty_new_config, hash2:@config_json)
48
+ new_config_json['config_version'] = default_config_json['config_version']
49
+
50
+ puts JSON.pretty_generate(new_config_json)
51
+ if !@args_appconfig_fullname.empty? && File::file?(@args_appconfig_fullname)
52
+ File.open(@args_appconfig_fullname, "w") do |f|
53
+ f.write(JSON.pretty_generate(new_config_json))
54
+ end
55
+ else
56
+ puts "Update config.json error!!!"
57
+ end
58
+
59
+ puts "\n\n=========删除的Key=============="
60
+ del_key_json = minus_hash(hash1:@config_json, hash2:new_config_json)
61
+ puts JSON.pretty_generate(del_key_json)
62
+
63
+ puts "\n\n=========新增的Key=============="
64
+ add_key_json = minus_hash(hash1:new_config_json, hash2:@config_json)
65
+ puts JSON.pretty_generate(add_key_json)
66
+
67
+ end
68
+
69
+ def update_mainapp_config
70
+
71
+ cli = HighLine.new
72
+
73
+ menu_choice = select_main_app
74
+
75
+ if menu_choice == "None" || menu_choice == "IdeaApp"
76
+ puts "Do not need fixed config!"
77
+ else
78
+
79
+ deploy_repo_name = get_deploy_setting_repo(tagname:menu_choice)
80
+ puts "deploy_repo_name: #{deploy_repo_name}"
81
+
82
+ mainapp_config_dir = clong_buildconfig_repo(repo_name: deploy_repo_name)
83
+ mainapp_config_file = File.join(mainapp_config_dir, "config.json")
84
+ mainapp_config_json = nil
85
+ if !mainapp_config_file.empty? && File::file?(mainapp_config_file)
86
+ mainapp_config_json=JSON.parse(File.read(mainapp_config_file))
87
+ unless mainapp_config_json
88
+ puts "Default json not found !!!"
89
+ end
90
+ else
91
+ puts "Default json not found !!!"
92
+ end
93
+
94
+ if !@args_appconfig_fullname.empty? && File::file?(@args_appconfig_fullname)
95
+
96
+ currentapp_config_json=JSON.parse(File.read(@args_appconfig_fullname))
97
+
98
+ currentapp_config_json['project_info']['ios_deployment_targe'] = mainapp_config_json['project_info']['ios_deployment_targe']
99
+ currentapp_config_json['project_info']['app_type'] = mainapp_config_json['project_info']['app_type']
100
+ currentapp_config_json['project_info']['build_type'] = mainapp_config_json['project_info']['build_type']
101
+ currentapp_config_json['project_info']['project_module'] = mainapp_config_json['project_info']['project_module']
102
+
103
+ currentapp_config_json['app_setting']['kGUKeyAppsFlyerDevKey'] = 'dN3s94tzJN3e8M3R9EMSbc'
104
+
105
+
106
+ if menu_choice == "AddMe"
107
+ desc_location_use = currentapp_config_json['app_info']['desc_location_use']
108
+ if desc_location_use.nil? || desc_location_use == "" || desc_location_use.empty? || desc_location_use == "++++++++"
109
+ currentapp_config_json['app_info']['desc_location_use'] = "So that you can know people near you!"
110
+ end
111
+ end
112
+
113
+ File.open(@args_appconfig_fullname, "w") do |f|
114
+ f.write(JSON.pretty_generate(currentapp_config_json))
115
+ end
116
+ puts "Update config.json with #{menu_choice} !!!"
117
+ else
118
+ puts "Update config.json error!!!"
119
+ end
120
+
121
+
122
+ end
123
+
124
+ end
125
+
126
+ end
127
+ end
128
+ end
129
+ end
@@ -0,0 +1,63 @@
1
+ require 'highline/import'
2
+ require 'xcodeproj'
3
+ require 'find'
4
+ require 'fileutils'
5
+
6
+ module Pindo
7
+ class Command
8
+ class Deploy < Command
9
+ class Uploadipa < Deploy
10
+
11
+ include Command::DeployOptions
12
+
13
+ self.summary = 'Upload ipa to iTunes Connect.'
14
+
15
+ self.description = <<-DESC
16
+ Upload ipa to iTunes Connect.
17
+ DESC
18
+
19
+ self.arguments = [
20
+ CLAide::Argument.new('path/to/config.json', true),
21
+ ]
22
+
23
+ def run
24
+ current_project_dir = Dir.pwd
25
+
26
+ ipa_file = nil
27
+ Find.find(File.join(current_project_dir, "build")) do |path|
28
+ if path.to_s.end_with?(".ipa") then
29
+ ipa_file = path
30
+ puts "++++++++++"
31
+ puts ipa_file
32
+ end
33
+ end
34
+
35
+ if !ipa_file.nil? && File.exist?(ipa_file)
36
+
37
+ command = "fastlane deliver --ipa " + %Q{"#{ipa_file}"} + " --skip_binary_upload false --skip_metadata true --skip_screenshots true --skip_app_version_update true -f"
38
+ puts command
39
+ system command
40
+
41
+ # values = {
42
+ # username:@apple_id,
43
+ # app_identifier: @bundle_id,
44
+ # ipa:ipa_file,
45
+ # skip_binary_upload:false,
46
+ # skip_screenshots:true,
47
+ # skip_metadata:true,
48
+ # skip_app_version_update:true,
49
+ # force:true
50
+ # }
51
+
52
+ # puts Deliver::Options.available_options
53
+
54
+ # config = FastlaneCore::Configuration.create(Deliver::Options.available_options, values)
55
+ # Deliver::Runner.new.run(config)
56
+ end
57
+
58
+ end
59
+
60
+ end
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,44 @@
1
+
2
+
3
+
4
+ require 'pindo/deploy/updateconfig'
5
+ require 'pindo/deploy/initconfig'
6
+ require 'pindo/deploy/pullconfig'
7
+ require 'pindo/deploy/reportbug'
8
+
9
+ require 'pindo/deploy/bundleid'
10
+ require 'pindo/deploy/itcapp'
11
+ require 'pindo/deploy/cert'
12
+ require 'pindo/deploy/pem'
13
+ require 'pindo/deploy/build'
14
+
15
+ require 'pindo/deploy/configproj'
16
+ require 'pindo/deploy/confusecode'
17
+ require 'pindo/deploy/confuseproj'
18
+ require 'pindo/deploy/fabric'
19
+ require 'pindo/deploy/resign'
20
+ require 'pindo/deploy/iap'
21
+ require 'pindo/deploy/itcinfo'
22
+ require 'pindo/deploy/getitcinfo'
23
+ require 'pindo/deploy/quswark'
24
+ require 'pindo/deploy/quswauth'
25
+ require 'pindo/deploy/check'
26
+ require 'pindo/deploy/tag'
27
+
28
+ # require 'pindo/deploy/uploadipa'
29
+
30
+ module Pindo
31
+ class Command
32
+
33
+
34
+ class Deploy < Command
35
+
36
+
37
+ self.abstract_command = true
38
+ self.summary = '发布阶段相关命令'
39
+
40
+
41
+
42
+ end
43
+ end
44
+ end