cocoapods-assets-cleaner 0.0.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: cece82647e1b95f77e2b78d3e59773d2baeb6e173f2f866d6aaf114846a444fa
4
+ data.tar.gz: 673cd2620a687a4150565b88717d2068601c773e317219d7e985349058784404
5
+ SHA512:
6
+ metadata.gz: 729532be45bd03a7027806f0cc77d1c41ba5636aa3e40d01def897834f33dc0a9caa246ea3fe096c94185cc55194fd3744e611df6509376d39d989f48dceefb7
7
+ data.tar.gz: fd39d4cedeec6983c78962c35c97a9abf9b899c3bce82116bdd80aebe6ad9f5143b1e80176dd8da0a0974ef5947aef94efca360910e8f39732589c60da3bbb2e
@@ -0,0 +1,110 @@
1
+ require "cocoapods"
2
+ require "fileutils"
3
+
4
+ module CocoapodsAssetsCleaner
5
+ class AssetsCleaner
6
+ def initialize(main_project_path_param, assets_path_param)
7
+ @main_project_path = main_project_path_param
8
+ @assets_path = assets_path_param
9
+
10
+ @spinner = Enumerator.new do |e|
11
+ loop do
12
+ e.yield "|"
13
+ e.yield "/"
14
+ e.yield "-"
15
+ e.yield '\\'
16
+ end
17
+ end
18
+ end
19
+
20
+ def init_clean
21
+ Pod::UI.puts "Getting images from assets...".yellow
22
+ imagesets = get_images_from_path(@assets_path)
23
+ Pod::UI.puts "#{imagesets.count} images founded"
24
+
25
+ Pod::UI.puts "Searching for unused images...".yellow
26
+ unused_imagesets = check_and_extact_unsed_images(imagesets, @main_project_path)
27
+ Pod::UI.puts "#{unused_imagesets.count} unused images founded"
28
+
29
+ Pod::UI.puts "Removing unused images...".yellow
30
+ removed_imagesets = unused_imagesets.map { |image_name, image_path| remove_unused_image(image_name, image_path) }
31
+ Pod::UI.puts "Removed #{removed_imagesets.count} from #{unused_imagesets.count} unused images."
32
+ end
33
+
34
+ def show_indicator_percentage(i)
35
+ printf("\r%d%% %s", i, @spinner.next)
36
+ sleep(0.1)
37
+ end
38
+
39
+ def remove_unused_image(image_name, image_path)
40
+ FileUtils.remove_dir(image_path)
41
+
42
+ if File.directory?(image_path)
43
+ Pod::UI.puts "Failure on removing #{image_name} Asset".red
44
+ return false
45
+ else
46
+ return true
47
+ end
48
+ end
49
+
50
+ def check_and_extact_unsed_images(images, path)
51
+ unused_images = {}
52
+ count = 0
53
+
54
+ images.each do |image_name, image_path|
55
+ command_sh = `grep -R -l --exclude-dir=Assets.xcassets "#{image_name}" #{path}`
56
+ if command_sh == ""
57
+ Pod::UI.puts "\r#{image_name} is not used.".yellow
58
+ unused_images[image_name] = image_path
59
+ else
60
+ Pod::UI.puts "\r#{image_name} is used.".green
61
+ end
62
+
63
+ percentage = (100 * count) / images.count
64
+ show_indicator_percentage(percentage)
65
+ count += 1
66
+ end
67
+ return unused_images
68
+ end
69
+
70
+ def get_images_from_path(path)
71
+ result = get_images_directories_from_path(path)
72
+ imagesets = result[:images]
73
+ directories = result[:directories]
74
+
75
+ while directories.count > 0
76
+ current_directories = directories
77
+ directories = []
78
+
79
+ current_directories.each do |directory|
80
+ new_result = get_images_directories_from_path(directory)
81
+ new_result[:images].each { |key, value| imagesets[key] = value }
82
+ directories += new_result[:directories] || []
83
+ end
84
+ end
85
+
86
+ return imagesets
87
+ end
88
+
89
+ def get_images_directories_from_path(path)
90
+ all_dir = Dir.entries(path)
91
+ .select { |entry| File.directory? File.join(path, entry) and !(entry == "." || entry == "..") }
92
+
93
+ images = {}
94
+ all_non_images_dir = []
95
+ all_dir.each do |directory|
96
+ new_path = File.join(path, directory)
97
+ if directory.include? ".imageset"
98
+ images[directory.gsub(".imageset", "")] = new_path
99
+ else
100
+ all_non_images_dir.push(new_path)
101
+ end
102
+ end
103
+
104
+ return {
105
+ :images => images,
106
+ :directories => all_non_images_dir,
107
+ }
108
+ end
109
+ end
110
+ end
@@ -0,0 +1,42 @@
1
+ require 'cocoapods'
2
+ require 'cocoapods-assets-cleaner/assets_cleaner'
3
+
4
+ include CocoapodsAssetsCleaner
5
+
6
+ module Pod
7
+ class Command
8
+
9
+ class CleanUnusedAssets < Command
10
+ self.summary = 'Cocoapods-plugin that helps to clean unused assets on Xcode projects.'
11
+
12
+ self.description = <<-DESC
13
+ Assets-cleaner is a Cocoapods-plugin that helps to clean unused assets on Xcode projects.
14
+ DESC
15
+
16
+ def validate!
17
+ super
18
+ help! 'Define the assets path.' unless @assets_path
19
+ end
20
+
21
+ self.arguments = []
22
+
23
+ def self.options
24
+ [
25
+ ['--assets-path', 'Assets path'],
26
+ ['--project-path', 'Projects path (default: ./)']
27
+ ].concat(super)
28
+ end
29
+
30
+ def initialize(argv)
31
+ @assets_path = argv.option('assets-path')
32
+ @project_path = argv.option('project-path', './')
33
+ super
34
+ end
35
+
36
+ def run
37
+ assets_cleaner = CocoapodsAssetsCleaner::AssetsCleaner.new(@project_path, @assets_path)
38
+ assets_cleaner.init_clean()
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1 @@
1
+ require 'cocoapods-assets-cleaner/command/cleaner'
@@ -0,0 +1,3 @@
1
+ module CocoapodsAssetsCleaner
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1 @@
1
+ require 'cocoapods-assets-cleaner/gem_version'
@@ -0,0 +1 @@
1
+ require 'cocoapods-assets-cleaner/command'
metadata ADDED
@@ -0,0 +1,79 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: cocoapods-assets-cleaner
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Leo Valentim
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2019-08-08 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.3'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.3'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ description: Assets-cleaner is a Cocoapods-plugin that helps to clean unused assets
42
+ on Xcode projects.
43
+ email:
44
+ - leo.valent@hotmail.com
45
+ executables: []
46
+ extensions: []
47
+ extra_rdoc_files: []
48
+ files:
49
+ - lib/cocoapods-assets-cleaner.rb
50
+ - lib/cocoapods-assets-cleaner/assets_cleaner.rb
51
+ - lib/cocoapods-assets-cleaner/command.rb
52
+ - lib/cocoapods-assets-cleaner/command/cleaner.rb
53
+ - lib/cocoapods-assets-cleaner/gem_version.rb
54
+ - lib/cocoapods_plugin.rb
55
+ homepage: https://github.com/LeoValentim/cocoapods-assets-cleaner/
56
+ licenses:
57
+ - MIT
58
+ metadata: {}
59
+ post_install_message:
60
+ rdoc_options: []
61
+ require_paths:
62
+ - lib
63
+ required_ruby_version: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
68
+ required_rubygems_version: !ruby/object:Gem::Requirement
69
+ requirements:
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ version: '0'
73
+ requirements: []
74
+ rubyforge_project:
75
+ rubygems_version: 2.7.8
76
+ signing_key:
77
+ specification_version: 4
78
+ summary: Cocoapods-plugin that helps to clean unused assets on Xcode projects.
79
+ test_files: []