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,56 @@
1
+
2
+ require 'fileutils'
3
+
4
+ module Pindo
5
+ class Command
6
+ class Upgrade < Command
7
+
8
+ self.summary = '更新pindo'
9
+
10
+ self.description = <<-DESC
11
+ 更新pindo版本,用法: pindo upgrade
12
+ DESC
13
+
14
+ self.arguments = [
15
+
16
+ ]
17
+
18
+ def self.options
19
+ [
20
+
21
+ ].concat(super)
22
+ end
23
+
24
+ def initialize(argv)
25
+ super(argv)
26
+ @additional_args = argv.remainder!
27
+ end
28
+
29
+ def validate!
30
+ super
31
+ end
32
+
33
+ def run
34
+
35
+ puts "正在更新pindo..."
36
+ command = '/bin/bash -c "$(curl -fsSL https://gitee.com/goodbuildtest/env/raw/master/pindo_upgrade.sh)"'
37
+ puts "正在运行脚本: #{command}"
38
+ system command
39
+ # clone_pindo_common_config_repo(force_delete: false)
40
+ # clone_pindo_env_config_repo(force_delete: false)
41
+
42
+ # commands = [
43
+ # "sudo gem update pindo",
44
+ # "sudo gem cleanup"
45
+ # ]
46
+
47
+ # commands.each do |command|
48
+ # puts "正在执行 #{command} ..."
49
+ # system command
50
+ # end
51
+ # puts "pindo 已更新到最新版本!"
52
+ end
53
+
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,213 @@
1
+
2
+
3
+ require 'highline/import'
4
+ require 'fileutils'
5
+ require 'json'
6
+ require 'faraday'
7
+ require 'xcodeproj'
8
+
9
+ module Pindo
10
+ class Command
11
+ class Utils < Command
12
+ class Applovin < Utils
13
+
14
+ self.summary = '接入applovin max广告平台时更新Xcode中info.plist'
15
+
16
+ self.description = <<-DESC
17
+ 接入applovin max广告平台时更新Xcode中info.plist,用法:在工程目录下执行 pindo utils applovin
18
+ DESC
19
+
20
+ self.arguments = [
21
+ ]
22
+
23
+ def self.options
24
+ [
25
+ ['--appstore', 'appstore模式,一般不用'],
26
+ ['--install', '是否运行applovin脚本'],
27
+ ].concat(super)
28
+ end
29
+
30
+ def initialize(argv)
31
+
32
+ @args_appstore_flag = argv.flag?('appstore', false)
33
+ @args_install_flag = argv.flag?('install', false)
34
+
35
+ super(argv)
36
+ @additional_args = argv.remainder!
37
+ end
38
+
39
+ def validate!
40
+ super
41
+ end
42
+
43
+ def run
44
+
45
+ skadnetwork_id_array = []
46
+
47
+ applovin_res_json = req_applovin_json
48
+ if !applovin_res_json.nil? && !applovin_res_json["skadnetwork_ids"].nil?
49
+ applovin_res_json["skadnetwork_ids"].each do |network_id|
50
+ skadnetwork_id_array << network_id["skadnetwork_id"]
51
+ end
52
+ end
53
+
54
+ applovin_media_res_json = req_applovin_mediia_json
55
+ if !applovin_media_res_json.nil? && !applovin_media_res_json["mediationSKAdnetworkIdsSpecs"].nil?
56
+ applovin_media_res_json["mediationSKAdnetworkIdsSpecs"].each do |media_item|
57
+ skadnetwork_id_array = skadnetwork_id_array + media_item["skAdnetworkIds"]
58
+ end
59
+ end
60
+
61
+ skadnetwork_id_array = skadnetwork_id_array.uniq
62
+ if !skadnetwork_id_array.nil? && skadnetwork_id_array.size.size > 50
63
+ puts "SKAdNetworkItems Size: #{skadnetwork_id_array.size}"
64
+ else
65
+ config_file = File.join(File::expand_path(Pindoconfig.instance.pindo_common_configdir), "applovin_client_config.json")
66
+ config_json = JSON.parse(File.read(config_file))
67
+ skadnetwork_id_array = skadnetwork_id_array + config_json["SKAdNetworkItems"]
68
+ puts "SKAdNetworkItems Size: #{skadnetwork_id_array.size}"
69
+ end
70
+
71
+
72
+ current_dir = Dir.pwd
73
+ project_fullname = nil
74
+ Dir.chdir(current_dir)
75
+ Dir.foreach(current_dir) do |file|
76
+ if file =~ /(.*).xcodeproj/
77
+ project_fullname = file
78
+ break;
79
+ end
80
+ end
81
+ project_root_dir = current_dir
82
+
83
+
84
+
85
+ plist_file_name = File.join(project_root_dir, "Applovin-info.plist")
86
+ if !project_fullname.nil?
87
+ proj_name = File.basename(project_fullname, ".xcodeproj")
88
+ plist_file_name = get_applovin_infoplist(project_dir:project_root_dir, proj_name:proj_name)
89
+ end
90
+
91
+
92
+ puts plist_file_name
93
+
94
+
95
+ info_plist_dict = {}
96
+ if File.exist?(plist_file_name)
97
+ info_plist_dict = Xcodeproj::Plist.read_from_path(plist_file_name)
98
+ end
99
+
100
+
101
+ info_plist_dict["NSAdvertisingAttributionReportEndpoint"] = info_plist_dict["NSAdvertisingAttributionReportEndpoint"] || "https://postbacks-app.com"
102
+
103
+ if !info_plist_dict.has_key?("NSAppTransportSecurity")
104
+ info_plist_dict["NSAppTransportSecurity"] = {}
105
+ info_plist_dict["NSAppTransportSecurity"]["NSAllowsArbitraryLoads"] = true
106
+ end
107
+
108
+ # puts JSON.pretty_generate(info_plist_dict["SKAdNetworkItems"])
109
+ # puts 111
110
+ # info_plist_dict["NSUserTrackingUsageDescription"] = info_plist_dict["NSUserTrackingUsageDescription"] || "Your data will be used to provide you a better experience. We don't share any data with 3rd parties."
111
+
112
+ if !skadnetwork_id_array.nil? && skadnetwork_id_array.size > 0
113
+ info_plist_dict["SKAdNetworkItems"] = []
114
+ skadnetwork_id_array.each do |network_id|
115
+ item = {}
116
+ item["SKAdNetworkIdentifier"] = network_id
117
+ info_plist_dict["SKAdNetworkItems"] << item
118
+ end
119
+ end
120
+
121
+
122
+
123
+ Xcodeproj::Plist.write_to_path(info_plist_dict, plist_file_name)
124
+
125
+
126
+
127
+ if @args_install_flag && !project_fullname.nil?
128
+
129
+ pindo_common_dir = pindo_single_config.pindo_common_configdir
130
+
131
+ app_lovin_script = File.join(pindo_common_dir, "AppLovinQualityServiceSetup-ios-dev.rb")
132
+ if @args_appstore_flag
133
+ app_lovin_script = File.join(pindo_common_dir, "AppLovinQualityServiceSetup-ios.rb")
134
+ end
135
+
136
+ project_script_file = File.join(project_root_dir, "AppLovinQualityServiceSetup-ios.rb")
137
+ FileUtils.cp_r(app_lovin_script, project_script_file)
138
+ command = "ruby " + project_script_file
139
+ puts command
140
+ system command
141
+
142
+ end
143
+ end
144
+
145
+ def get_applovin_infoplist(project_dir:nil, proj_name:nil)
146
+
147
+ info_plist_path = File.join(project_dir, "Applovin-info.plist")
148
+ proj_fullname = File.join(project_dir, proj_name) + ".xcodeproj"
149
+ if File.exist?(proj_fullname)
150
+ project_obj = Xcodeproj::Project.open(proj_fullname)
151
+ project_obj.targets.each do |target|
152
+
153
+ if target.product_type.to_s.eql?("com.apple.product-type.application") then
154
+ temp_info = target.build_configurations.first.build_settings['INFOPLIST_FILE']
155
+ info_plist_path = File.join(project_dir, temp_info)
156
+ end
157
+ end
158
+ end
159
+
160
+ return info_plist_path
161
+ end
162
+
163
+
164
+ def req_applovin_json
165
+
166
+
167
+ begin
168
+ # https://dash.applovin.com/docs/v1/skadnetwork_ids.json
169
+ applovin_url = "https://dash.applovin.com/docs/v1/skadnetwork_ids.json"
170
+ con = Faraday.new
171
+ res = con.get do |req|
172
+ req.url applovin_url
173
+ req.headers['Content-Type'] = 'application/json'
174
+ end
175
+
176
+ applovin_res_json = JSON.parse(res.body)
177
+ return applovin_res_json
178
+ rescue Exception => e
179
+ return nil
180
+ end
181
+
182
+
183
+
184
+ end
185
+
186
+ def req_applovin_mediia_json
187
+
188
+
189
+ begin
190
+ applovin_url = "https://dash.applovin.com/docs/v1/mediation_sk_adnetwork_ids"
191
+ con = Faraday.new
192
+ res = con.get do |req|
193
+ req.url applovin_url
194
+ req.headers['Content-Type'] = 'application/json'
195
+ end
196
+
197
+ applovin_res_json = JSON.parse(res.body)
198
+ return applovin_res_json
199
+ rescue Exception => e
200
+ return nil
201
+ end
202
+ end
203
+
204
+ end
205
+ end
206
+ end
207
+ end
208
+
209
+
210
+
211
+
212
+
213
+
@@ -0,0 +1,209 @@
1
+
2
+
3
+ require 'highline/import'
4
+ require 'fileutils'
5
+ require 'json'
6
+ require 'pindo/client/bossclient'
7
+
8
+ module Pindo
9
+ class Command
10
+ class Utils < Command
11
+ class Boss < Utils
12
+
13
+
14
+ self.summary = '模拟iOS客户端快速查看boss的状态'
15
+
16
+ self.description = <<-DESC
17
+ 模拟iOS客户端快速查看boss的状态
18
+ DESC
19
+
20
+ self.arguments = [
21
+
22
+ ]
23
+
24
+ def self.options
25
+ [
26
+ ['--platform', '设置平台号: --platform=\"iOS_Test\"'],
27
+ ['--bundleid', '设置bundle id: --bundleid=\"your url\"'],
28
+ ['--appversion', '设置app的版本号: --appversion=\"1.0.0\"'],
29
+ ['--apptype', '设置app的类型, 默认是FancyApp,属于个性化类型: --apptype=\"FancyApp\"'],
30
+
31
+ ].concat(super)
32
+ end
33
+
34
+
35
+ def initialize(argv)
36
+
37
+ @platform = argv.option('platform')
38
+ @bundleid = argv.option('bundleid')
39
+ @appversion = argv.option('appversion')
40
+ @apptype = argv.option('apptype') || "FunnyApp"
41
+
42
+ super(argv)
43
+ @additional_args = argv.remainder!
44
+ end
45
+
46
+ def validate!
47
+
48
+ super
49
+ end
50
+
51
+ def run
52
+
53
+
54
+ # app_info_dict = {
55
+ # app_version:"",
56
+ # bundle_id:"",
57
+ # platform:"",
58
+ # api_version:"1.0",
59
+ # apps_flyer_info:{},
60
+ # login_device_id: "",
61
+ # device_info:{}
62
+ # }
63
+
64
+ # @boss_client = BossClient.new(app_type:"FancyApp", is_dev:false)
65
+
66
+ # device_info = @boss_client.get_default_device_info
67
+ # # puts device_info
68
+ # app_info_dict[:login_device_id] = device_info.device_id
69
+ # app_info_dict[:device_info] = device_info
70
+ # app_info_dict[:apps_flyer_info] = @boss_client.get_default_device_info
71
+
72
+
73
+
74
+ # app_version = "1.0.0"
75
+ # bundle_id = "com.heroneverdie101.fancyapp"
76
+ # platform = "iOS_Funny_Release"
77
+
78
+ # app_info_dict[:app_version] = app_version || "1.0.0"
79
+ # app_info_dict[:bundle_id] = bundle_id || "com.heroneverdie101.fancyapp"
80
+ # app_info_dict[:platform] = platform || "iOS_Funny_Release"
81
+
82
+
83
+ # data_json = @boss_client.refresh_setting(app_info_dict:app_info_dict)
84
+
85
+ # if !data_json["data"].nil?
86
+ # puts JSON.pretty_generate(data_json["data"])
87
+ # else
88
+ # puts JSON.pretty_generate(data_json)
89
+ # end
90
+
91
+ @appconfig_file = './config.json'
92
+ @appconfig_file=File::expand_path(@appconfig_file)
93
+
94
+ base_url = nil
95
+ if File.exist?(@appconfig_file)
96
+ current_config_json=JSON.parse(File.read(@appconfig_file))
97
+
98
+ if @apptype.nil?
99
+ @apptype = current_config_json["project_info"]["app_type"]
100
+ end
101
+
102
+ if @appversion.nil?
103
+ @appversion = current_config_json["app_info"]["app_version"]
104
+ end
105
+
106
+ if @bundleid.nil?
107
+ @bundleid = current_config_json["app_info"]["app_identifier"]
108
+ end
109
+
110
+ if @platform.nil?
111
+ @platform = current_config_json["app_setting"]["kGUKeyAppPlatform"]
112
+ end
113
+
114
+ if base_url.nil?
115
+ base_url = current_config_json["app_setting"]["kGUKeyAppClientHost"]
116
+ end
117
+ end
118
+
119
+ app_version = @appversion || "1.0.0"
120
+ bundle_id = @bundleid || "com.heroneverdie101.fancyapptest"
121
+ platform = @platform || "iOS_Funny_Test"
122
+ apptype = @apptype || "FunnyApp"
123
+
124
+ boss_client = BossClient.new(app_type:apptype, is_dev:false, base_url:base_url)
125
+ data_json = Boss::get_config(boss_client:boss_client, app_version:app_version, bundle_id:bundle_id, platform:platform)
126
+
127
+ if !data_json["data"].nil?
128
+ puts JSON.pretty_generate(data_json["data"])
129
+ else
130
+ puts JSON.pretty_generate(data_json)
131
+ end
132
+
133
+
134
+ is_in_review_status = BossClient::is_in_review_status_with_confirm_key(confirm_key:data_json["data"]["confirm_key"])
135
+ puts
136
+ puts
137
+ puts " bundle_id:#{bundle_id}"
138
+ puts " app_version:#{app_version}"
139
+ puts " platform:#{platform}"
140
+ puts " Base Url:#{boss_client.base_url}"
141
+ puts " App Type:#{boss_client.app_type}"
142
+ puts
143
+
144
+ if is_in_review_status
145
+ puts " 当前设备,当前参数是审核状态".bold.yellow
146
+ else
147
+ puts " 当前设备,当前参数是非审核状态".bold.blue
148
+ end
149
+ puts
150
+ puts
151
+
152
+
153
+ end
154
+
155
+
156
+ def self.get_config(boss_client:nil, app_version:nil, bundle_id:nil, platform:nil)
157
+
158
+ puts
159
+ puts
160
+ puts " bundle_id:#{bundle_id}"
161
+ puts " app_version:#{app_version}"
162
+ puts " platform:#{platform}"
163
+ puts " Base Url:#{boss_client.base_url}"
164
+ puts " App Type:#{boss_client.app_type}"
165
+ puts
166
+ puts
167
+
168
+ app_info_dict = {
169
+ app_version:"",
170
+ bundle_id:"",
171
+ platform:"",
172
+ api_version:"1.0",
173
+ apps_flyer_info:{},
174
+ login_device_id: "",
175
+ device_info:{}
176
+ }
177
+
178
+
179
+
180
+ device_info = boss_client.get_default_device_info
181
+ # puts device_info
182
+ app_info_dict[:login_device_id] = device_info.device_id
183
+ app_info_dict[:device_info] = device_info
184
+ app_info_dict[:apps_flyer_info] = boss_client.get_default_device_info
185
+
186
+
187
+ app_info_dict[:app_version] = app_version || "1.0.0"
188
+ app_info_dict[:bundle_id] = bundle_id || "com.heroneverdie101.fancyapp"
189
+ app_info_dict[:platform] = platform || "iOS_Funny_Release"
190
+
191
+
192
+ data_json = boss_client.refresh_setting(app_info_dict:app_info_dict)
193
+
194
+ return data_json
195
+
196
+ end
197
+
198
+
199
+
200
+ end
201
+ end
202
+ end
203
+ end
204
+
205
+
206
+
207
+
208
+
209
+
@@ -0,0 +1,60 @@
1
+
2
+ require 'highline/import'
3
+ require 'fileutils'
4
+ require 'json'
5
+ require 'open3'
6
+
7
+ module Pindo
8
+ class Command
9
+ class Utils < Command
10
+ class Clearcert < Utils
11
+
12
+ self.summary = '清理并且删除本机中所安装的所有iOS证书'
13
+
14
+ self.description = <<-DESC
15
+ 清理并且删除本机中所安装的所有iOS证书
16
+ DESC
17
+
18
+
19
+ self.arguments = [
20
+
21
+ ]
22
+
23
+ def self.options
24
+ [
25
+
26
+ ].concat(super)
27
+ end
28
+
29
+ def initialize(argv)
30
+
31
+ super(argv)
32
+ @additional_args = argv.remainder!
33
+ end
34
+
35
+ def validate!
36
+ super
37
+ end
38
+
39
+ def run
40
+ output, _ = Open3.capture2('security find-identity -p codesigning')
41
+ identity_ids_0 = []
42
+ identity_ids_1 = output.split("\n").map { |line| line.split(' ')[1] if line.include?('Apple Development') }.compact
43
+ identity_ids_2 = output.split("\n").map { |line| line.split(' ')[1] if line.include?('Apple Distribution') }.compact
44
+ identity_ids = identity_ids_0 + identity_ids_1 + identity_ids_2
45
+ identity_ids = identity_ids.uniq
46
+ puts identity_ids
47
+
48
+ identity_ids.each do |identity_id|
49
+ system "security delete-certificate -Z #{identity_id}"
50
+ end
51
+
52
+ profile_file_dir = File.expand_path("~/Library/MobileDevice")
53
+ profile_file_patb = File.join(profile_file_dir, "Provisioning Profiles")
54
+ FileUtils.rm_rf(profile_file_patb)
55
+
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end