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