cocoapods-assets-cleaner 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
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: []