podfileDep 2.1.0 → 2.1.1

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 50e737e2140890e04f3c8d4761e5fe9a95d8744f070fae28c1adb241099f3e9d
4
- data.tar.gz: b5e4cb2736576920794a0278fc745c909ec615783fed0eadc0474094d130f1ca
3
+ metadata.gz: d685c50ac91b5bc9100a895fe300df13c8d1f4ca29eec6cfd0d36c1e74edaf08
4
+ data.tar.gz: 60365a5983ce3810316f3b72b061e38717dfbd1f4ae34838f395a90659c4f755
5
5
  SHA512:
6
- metadata.gz: ad13070d408d863fd0eb1585e7f80323ed284d72af1fdb01b54619c1aab61b7642acf18fc8d48d855e2bb50dbfd8f1f5d52297b4231fddc75440131ed5290fd8
7
- data.tar.gz: e9b622927e64d40733416304d3a96c1afca6e7d34735bc7f153a4916b003f43394657066144649a6c10c5ab526ffee59e7c85bbabd9b2763e902342e1c593faf
6
+ metadata.gz: a3dc46f47e0a2f3fdff945c663396ae3f1727dd2a62f5c6e2c939be6d528f2045469c9bb73d75d6b27be317ec9aee34a1e6e7fe9509875d868df603579a9327d
7
+ data.tar.gz: b0bcbd47cf7ecad5c0f19a597fb531708b2b31f4da06b2bdc885985901dac4b0276bb4f3ca85f5810f404feb7ff786ec2bdd2ac402f850ee48221e14b0aae1f1
data/CHANGELOG.md CHANGED
@@ -32,4 +32,12 @@
32
32
 
33
33
  ## [2.0.1] - 2023-6-19
34
34
 
35
- - 打印间接依赖
35
+ - 打印间接依赖
36
+
37
+ ## [2.1.0] - 2023-6-19
38
+
39
+ - QUICKBUILD字段支持移除不被引用的依赖
40
+ -
41
+ ## [2.1.1] - 2023-6-19
42
+
43
+ - 移除不被引用的依赖在pod install时加速
@@ -3,59 +3,61 @@ module Pod
3
3
  # 移除未使用的组件
4
4
  class Uninstall
5
5
 
6
- def uninstall(module_name)
7
- puts "移除:#{module_name}"
6
+ def uninstall(uninstall_list)
8
7
  project_manager = XCProject::XcodeprojManager.share_manager
9
8
 
10
9
  # 删除引用
11
10
  pods_project = project_manager.get_pods_project
12
- uninstall_from_project(module_name, pods_project)
11
+ uninstall_from_project(uninstall_list, pods_project)
13
12
  pods_project.save
14
13
 
15
14
  # 删除资源文件等
16
- uninstall_from_frameworks(module_name, project_manager)
17
-
15
+ uninstall_from_frameworks(uninstall_list, project_manager)
18
16
 
19
17
  end
20
18
 
21
- def uninstall_from_frameworks(module_name, project_manager)
19
+ def uninstall_from_frameworks(module_list, project_manager)
22
20
  targets = project_manager.get_shell_targets
23
21
  targets.each do |target_name|
24
22
 
25
23
  target_supporting = "Pods-#{target_name}"
26
24
  resource_shell = "Pods-#{target_name}-resources.sh"
27
25
  resource_shell_path = "#{Dir.pwd}/Pods/Target Support Files/#{target_supporting}/#{resource_shell}"
28
- uninstall_from_file(resource_shell_path, module_name, "install_resource")
26
+ uninstall_from_file(resource_shell_path, module_list, "install_resource")
29
27
 
30
28
  # 删除frameworks
31
29
  frameworks_shell = "Pods-#{target_name}-frameworks.sh"
32
30
  frameworks_shell_path = "#{Dir.pwd}/Pods/Target Support Files/#{target_supporting}/#{frameworks_shell}"
33
- uninstall_from_file(frameworks_shell_path, module_name, "install_framework")
31
+ uninstall_from_file(frameworks_shell_path, module_list, "install_framework")
34
32
 
35
33
  # 删除配置
36
34
  # 根据通配符找到真实路径
37
35
  config_patton = "Pods-#{target_name}.*.xcconfig"
38
36
  config_patton_path = "#{Dir.pwd}/Pods/Target Support Files/#{target_supporting}/#{config_patton}"
39
37
  Dir[config_patton_path].select{|config_real_path|
40
- module_name = module_name.gsub("+", "_")
41
- module_name = module_name.gsub("-", "_")
42
- uninstall_for_config(config_real_path, module_name)
38
+ uninstall_for_config(config_real_path, module_list)
43
39
  }
44
40
  end
45
41
 
46
42
  end
47
- def uninstall_for_config(file_path, module_name)
43
+ def uninstall_for_config(file_path, module_list)
48
44
  find_array = []
49
- find_array << " -framework \"#{module_name}\""
50
- find_array << " \"${PODS_CONFIGURATION_BUILD_DIR}/#{module_name}/#{module_name}.framework/Headers\""
51
- find_array << " \"${PODS_CONFIGURATION_BUILD_DIR}/#{module_name}\""
52
- find_array << " \"${PODS_ROOT}/#{module_name}\""
53
- find_array << " \"${PODS_XCFRAMEWORKS_BUILD_DIR}/#{module_name}\""
45
+ module_list.each do |module_name|
46
+ module_name = module_name.gsub("+", "_")
47
+ module_name = module_name.gsub("-", "_")
48
+
49
+ find_array << " -framework \"#{module_name}\""
50
+ find_array << " \"${PODS_CONFIGURATION_BUILD_DIR}/#{module_name}/#{module_name}.framework/Headers\""
51
+ find_array << " \"${PODS_CONFIGURATION_BUILD_DIR}/#{module_name}\""
52
+ find_array << " \"${PODS_ROOT}/#{module_name}\""
53
+ find_array << " \"${PODS_XCFRAMEWORKS_BUILD_DIR}/#{module_name}\""
54
+
55
+ end
54
56
 
55
57
  replace = ""
56
58
  replace_str(file_path, find_array, replace)
57
59
  end
58
- def uninstall_from_file(file_path, module_name , keyword)
60
+ def uninstall_from_file(file_path, module_list , keyword)
59
61
  unless File.exist?(file_path)
60
62
  return
61
63
  end
@@ -64,9 +66,19 @@ module Pod
64
66
  content = ""
65
67
  line_array = IO.readlines(file_path)
66
68
  line_array.each_with_index { |line, index|
67
- if line.include?(keyword) and line.include?("/#{module_name}/")
68
- content += " echo 'remove #{module_name}'\n"
69
- next
69
+ if line.include?(keyword)
70
+ contain = false
71
+ module_list.each{|module_name|
72
+ if line.include?("/#{module_name}/")
73
+ contain = true
74
+ end
75
+ }
76
+
77
+ if contain
78
+ content += " echo ''\n"
79
+ next
80
+ end
81
+
70
82
  end
71
83
  content += line
72
84
  }
@@ -77,13 +89,13 @@ module Pod
77
89
  }
78
90
  end
79
91
 
80
- def uninstall_from_project(module_name, pods_project)
92
+ def uninstall_from_project(module_list, pods_project)
81
93
  pods_project.main_group.children.each {|child|
82
94
  if child.display_name != "Pods" and child.display_name != "Development Pods"
83
95
  next
84
96
  end
85
97
  child.children.reject! {|sun|
86
- sun.display_name == module_name
98
+ module_list.include?(sun.display_name)
87
99
  }
88
100
  }
89
101
 
@@ -92,7 +104,7 @@ module Pod
92
104
  end
93
105
 
94
106
  pods_project.targets.reject! do |child|
95
- child.name == module_name
107
+ module_list.include?(child.display_name)
96
108
  end
97
109
  end
98
110
 
@@ -27,12 +27,13 @@ module Unused
27
27
  end
28
28
 
29
29
  # 是否需要快速编译
30
- quick_build = Pod::YamlRelies.quick_build
30
+ quick_build = Pod::YamlManager.share_manager.quick_build
31
31
 
32
32
  uninstaller = Pod::Uninstall.new
33
33
 
34
34
  # 未使用的列表
35
35
  unused_list = []
36
+ uninstall_list = []
36
37
  installed_modules.each do |module_item|
37
38
 
38
39
  module_name = module_item.keys[0]
@@ -45,8 +46,9 @@ module Unused
45
46
  end
46
47
 
47
48
  if not used and not unused_list.include?(real_module_name)
48
- if quick_build
49
- uninstaller.uninstall(real_module_name)
49
+ local_contain = Pod::YamlManager.share_manager.local_yaml_contain(real_module_name)
50
+ if quick_build and not local_contain
51
+ uninstall_list << real_module_name
50
52
  else
51
53
  unused_list << real_module_name
52
54
  end
@@ -54,8 +56,14 @@ module Unused
54
56
  end
55
57
 
56
58
  if unused_list.size >0
57
- puts unused_list
58
- puts "以上组件未被任何地方引用"
59
+ # puts unused_list
60
+ puts "未被任何地方引用的组件:#{unused_list}"
61
+ end
62
+
63
+ if uninstall_list.size > 0
64
+ # puts uninstall_list
65
+ puts "被移除组件:#{uninstall_list}"
66
+ uninstaller.uninstall(uninstall_list)
59
67
  end
60
68
 
61
69
  duration = ((Time.now.to_f * 1000).to_i - start)*0.001
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module PodfileDep
4
- VERSION = "2.1.0"
4
+ VERSION = "2.1.1"
5
5
  end
@@ -42,9 +42,27 @@ module Pod
42
42
  end
43
43
 
44
44
  end
45
- class YamlRelies
45
+ class YamlManager
46
46
 
47
- def self.analysis_yaml(podfile, old)
47
+ # 缓存某个的依赖库
48
+ # {{"module_nameA":["module_nameA", module_nameB]},}
49
+ attr_accessor :local_yaml_dependencies
50
+
51
+ def initialize
52
+ @local_yaml_dependencies = {}
53
+ end
54
+
55
+ # 单例方法
56
+ @@instance = YamlManager.new
57
+
58
+ # 获取单例
59
+ def self.share_manager
60
+ @@instance
61
+ end
62
+
63
+ private_class_method :new
64
+
65
+ def analysis_yaml(podfile, old)
48
66
 
49
67
  # 获取targets列表
50
68
  project_manager = XCProject::XcodeprojManager.share_manager
@@ -56,25 +74,26 @@ module Pod
56
74
  podfile_third_party_yaml = Constants::PODFILE_THIRD_PARTY_YAML
57
75
 
58
76
  # 检查参数
59
- self.check_param(targets)
77
+ check_param(targets)
60
78
 
61
79
  # 生成YAML文件
62
- self.generate_local_yaml(podfile_local_yaml)
63
- self.generate_module_yaml(podfile_module_yaml, "# 企业内部组件")
64
- self.generate_module_yaml(podfile_third_party_yaml, "# 第三方维护组件")
80
+ generate_local_yaml(podfile_local_yaml)
81
+ generate_module_yaml(podfile_module_yaml, "# 企业内部组件")
82
+ generate_module_yaml(podfile_third_party_yaml, "# 第三方维护组件")
65
83
 
66
84
  # 读取yaml依赖
67
85
  yaml_dependencies = {}
68
- self.read_yaml_dependencies(podfile_third_party_yaml,false ,yaml_dependencies)
69
- self.read_yaml_dependencies(podfile_module_yaml,false ,yaml_dependencies)
70
- self.read_yaml_dependencies(podfile_local_yaml,true ,yaml_dependencies)
86
+ read_yaml_dependencies(podfile_third_party_yaml,false ,yaml_dependencies)
87
+ local_yaml_dependencies = yaml_dependencies #这里记录下
88
+ read_yaml_dependencies(podfile_module_yaml,false ,yaml_dependencies)
89
+ read_yaml_dependencies(podfile_local_yaml,true ,yaml_dependencies)
71
90
 
72
91
  # 打印依赖
73
- self.print_dependencies(yaml_dependencies)
92
+ print_dependencies(yaml_dependencies)
74
93
 
75
94
  # 为所有target生成依赖
76
95
  targets_dependencies = {}
77
- self.update_target_dependencies(targets, yaml_dependencies, targets_dependencies)
96
+ update_target_dependencies(targets, yaml_dependencies, targets_dependencies)
78
97
 
79
98
  # 兼容老方式
80
99
  if old
@@ -82,11 +101,11 @@ module Pod
82
101
  end
83
102
 
84
103
  # 存储所有依赖
85
- self.store_dependencies(targets_dependencies, podfile)
104
+ store_dependencies(targets_dependencies, podfile)
86
105
 
87
106
  end
88
107
 
89
- def self.store_dependencies(targets, podfile)
108
+ def store_dependencies(targets, podfile)
90
109
  # 存储所有的依赖
91
110
  targets.each { |name, dependencies|
92
111
  podfile.target name do
@@ -104,7 +123,7 @@ module Pod
104
123
  end
105
124
 
106
125
  # 检查方法调用的参数
107
- def self.check_param(targets)
126
+ def check_param(targets)
108
127
  msg = "❌ 参数需要填写target名字, 参数类型是字符串格式的数组。例如[\"test1\", \"test2\"]"
109
128
  unless targets.class == Array
110
129
  puts msg
@@ -120,7 +139,7 @@ module Pod
120
139
  end
121
140
 
122
141
  # 校验yaml文件写法是否正确
123
- def self.yaml_content(yaml_name)
142
+ def yaml_content(yaml_name)
124
143
  unless File.exist?(yaml_name)
125
144
  puts "文件不存在:"+yaml_name
126
145
  return nil
@@ -166,10 +185,10 @@ module Pod
166
185
  end
167
186
 
168
187
  # 读取yaml依赖
169
- def self.read_yaml_dependencies(yaml_name, can_cover, yaml_dependencies)
188
+ def read_yaml_dependencies(yaml_name, can_cover, yaml_dependencies)
170
189
 
171
190
  # 检查写法
172
- yaml_content = self.yaml_content(yaml_name)
191
+ yaml_content = yaml_content(yaml_name)
173
192
 
174
193
  unless yaml_content
175
194
  return
@@ -202,7 +221,7 @@ module Pod
202
221
  dependency.each_key { |key|
203
222
  unless available_keys.include?(key)
204
223
  gem_name = "yaml_relies"
205
- puts "❌ #{yaml_name}: 当前#{gem_name}版本(#{Yaml_relies::VERSION})不支持字段#{key}"
224
+ puts "❌ #{yaml_name}: 当前#{gem_name}版本(#{PodfileDep::VERSION})不支持字段#{key}"
206
225
  puts "请检查对应字段或尝试执行如下命令升级"
207
226
  puts "gem uninstall #{gem_name} && gem install #{gem_name}"
208
227
  exit!
@@ -297,7 +316,7 @@ module Pod
297
316
  end
298
317
 
299
318
  # 生成传进来的target的依赖库列表
300
- def self.update_target_dependencies(targets, yaml_dependencies, targets_dependencies)
319
+ def update_target_dependencies(targets, yaml_dependencies, targets_dependencies)
301
320
  temp_array = []
302
321
  yaml_dependencies.each_value { |value|
303
322
  temp_array << value
@@ -308,7 +327,7 @@ module Pod
308
327
  }
309
328
  end
310
329
 
311
- def self.print_dependencies(yaml_dependencies)
330
+ def print_dependencies(yaml_dependencies)
312
331
  puts "➡️ 解析依赖总数共计:#{yaml_dependencies.size}个\n\n"
313
332
  puts '⬇️ 打印依赖'
314
333
  yaml_dependencies.each_value { |dependency|
@@ -347,8 +366,12 @@ module Pod
347
366
  puts "⬆️ 打印完毕"
348
367
  end
349
368
 
369
+ def local_yaml_contain(module_name)
370
+ return local_yaml_dependencies.keys.include?(module_name)
371
+ end
372
+
350
373
  # 是否需要快速编译
351
- def self.quick_build
374
+ def quick_build
352
375
 
353
376
  podfile_local_yaml = Constants::PODFILE_LOCAL_YAML
354
377
 
@@ -368,7 +391,7 @@ module Pod
368
391
  end
369
392
 
370
393
  # 生成local文件
371
- def self.generate_local_yaml(podfile_local_yaml)
394
+ def generate_local_yaml(podfile_local_yaml)
372
395
  if File.exist?(podfile_local_yaml)
373
396
  return
374
397
  end
@@ -404,7 +427,7 @@ module Pod
404
427
  end
405
428
 
406
429
  # 生成其他的yaml文件
407
- def self.generate_module_yaml(yaml_name, prefix)
430
+ def generate_module_yaml(yaml_name, prefix)
408
431
  if File.exist?(yaml_name)
409
432
  return
410
433
  end
data/lib/podfileDep.rb CHANGED
@@ -9,7 +9,7 @@ module Pod
9
9
  plugin("podfileDep")
10
10
 
11
11
  # 解析依赖
12
- Pod::YamlRelies.analysis_yaml(self, false)
12
+ Pod::YamlManager.share_manager.analysis_yaml(self, false)
13
13
 
14
14
  end
15
15
  end
@@ -18,7 +18,7 @@ end
18
18
  # 兼容旧的方式
19
19
  module PodfileDep
20
20
  def PodfileDep.setup(targets)
21
- res = Pod::YamlRelies.analysis_yaml(nil, true)
21
+ res = Pod::YamlManager.share_manager.analysis_yaml(nil, true)
22
22
  warn "\n⚠️ [PodfileDep.setup方法已过期],请使用新的方式, 参考:https://gitee.com/sourceiOS/podfileDepDemo/blob/master/Podfile\n"
23
23
  res
24
24
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: podfileDep
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.0
4
+ version: 2.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - 王帅朋