appicon 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
+ SHA1:
3
+ metadata.gz: e3bc9f03e9131169566e0f84bcf37521154c5d51
4
+ data.tar.gz: b79254ba25647bd5188bdaf8197174afe58c4d7f
5
+ SHA512:
6
+ metadata.gz: c7d14f8cc3a9e8dd674e2c5188d5239ceecb9637c6fa14346e592c0f18bf41f9fa0f7c3345d9fe7ab5de8376d4ec24c96ba0d0e1fdc52de79326a225c4501e32
7
+ data.tar.gz: b4e322dfdb6f42c1cfc2ec82c222782442d4cef60f63f4e1cc9cddbccb3f198a3cc8535b46a4e136dc1be51aedf8e41567d0bfedeb15644f04ead70c8f9e5837
data/.gitignore ADDED
@@ -0,0 +1,18 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ .idea
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in appicon.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 Erik Sundin
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,43 @@
1
+ Do you think it's annoying having to drag and drop images in your iOS app Asset Catalog
2
+ every time an icon changes? Did you get the right image on the right size?
3
+ Do you think it's a pain in the ass dealing with lots of sizes of the icon?
4
+ Do you think these things could be automated?
5
+
6
+ *Yes, they can be.*
7
+
8
+ ## About
9
+
10
+ The appicon gem lets you only ever care about one icon, eg. the 1024x1024 iTunes version.
11
+ The tool will check which sizes you have set up for your app icon in your Asset Catalog,
12
+ generate all those icons for you and install them in your Asset Catalog. Done.
13
+
14
+ ## Installation
15
+
16
+ ```
17
+ $ gem install appicon
18
+ ```
19
+
20
+ Appicon uses ImageMagick for image conversion. Download and install ImageMagick from http://www.imagemagick.org.
21
+ Not sure if you have it installed already? Check:
22
+
23
+ ```
24
+ $ convert --version
25
+ ```
26
+
27
+ ## Usage
28
+
29
+ ```
30
+ $ appicon install iTunesIcon-1024x1024.png path/to/Images.xcassets
31
+ ```
32
+
33
+ ## Contact
34
+
35
+ Found a bug or missing something? Let me know, or even better, file a pull request!
36
+
37
+ Erik Sundin
38
+
39
+ - erik@eriksundin.se
40
+
41
+ ## License
42
+
43
+ Appicon gem is available under the MIT license. See the LICENSE file for more info.
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
data/appicon.gemspec ADDED
@@ -0,0 +1,24 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'appicon/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "appicon"
8
+ spec.version = Appicon::VERSION
9
+ spec.authors = ["Erik Sundin"]
10
+ spec.email = ["erik@eriksundin.se"]
11
+ spec.summary = %q{Convert and install iOS App icons into an XCode Asset Catalog.}
12
+ spec.homepage = "https://github.com/eriksundin/appicon"
13
+ spec.license = "MIT"
14
+
15
+ spec.files = `git ls-files -z`.split("\x0")
16
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
17
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
18
+ spec.require_paths = ["lib"]
19
+
20
+ spec.add_development_dependency "bundler", "~> 1.5"
21
+ spec.add_development_dependency "rake"
22
+ spec.add_dependency "commander", "~> 4.1.2"
23
+ spec.add_dependency 'json', '~> 1.8.1'
24
+ end
data/bin/appicon ADDED
@@ -0,0 +1,17 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'commander/import'
4
+
5
+ $:.push File.expand_path("../../lib", __FILE__)
6
+ require 'appicon'
7
+
8
+ program :version, Appicon::VERSION
9
+ program :description, 'Generate iOS App icons from a high resolution source.'
10
+
11
+ program :help, 'Author', 'Erik Sundin <erik@eriksundin.se>'
12
+ program :help, 'Website', 'http://github.com/eriksundin'
13
+ program :help_formatter, :compact
14
+
15
+ default_command :help
16
+
17
+ require 'appicon/commands'
@@ -0,0 +1,96 @@
1
+ require 'json'
2
+
3
+ command :'install' do |c|
4
+ c.syntax = "appicon install [icon] [asset catalog]"
5
+ c.summary = "Generate and install icons into an Xcode Asset Catalog."
6
+ c.description = "Every specified format in you App Icon set will be generated and installed."
7
+
8
+ c.action do |args, options|
9
+
10
+ validate_image_magick!
11
+
12
+ determine_icon! unless @icon = args[0]
13
+ determine_asset_catalog! unless @asset_catalog = args[1]
14
+
15
+ validate_icon!
16
+ validate_asset_catalog!
17
+
18
+ icon_sets = Dir.glob(File.join(@asset_catalog, '*.appiconset'))
19
+ abort("Could not find any Icon sets (.appiconset folders) in the asset catalog. Create one first!") unless icon_sets.size > 0
20
+ if icon_sets.size > 1
21
+ @icon_set = determine_icon_set! icon_sets
22
+ else
23
+ @icon_set = icon_sets.first
24
+ end
25
+
26
+ @contents_file = File.join(@icon_set, 'Contents.json')
27
+ contents = JSON.parse(File.read(@contents_file))
28
+ contents['images'].each do |image|
29
+ image_size = image['size']
30
+ image_scale = image['scale']
31
+
32
+ scaled_image_side = image_size.split('x').first.to_i * image_scale.sub('x', '').to_i
33
+ scaled_image_name = "Icon-#{image_size}-@#{image_scale}#{File.extname(@icon)}"
34
+ scaled_image_output = File.join(@icon_set, scaled_image_name)
35
+
36
+ # Generate each icon
37
+ puts "Generating #{image_size} @ #{image_scale}."
38
+ if system("convert #{@icon} -resize #{scaled_image_side}x#{scaled_image_side} #{scaled_image_output}")
39
+
40
+ # Remove old icons that are not used any more
41
+ previous_icon = image['filename']
42
+ if previous_icon
43
+ previous_icon_file = File.join(@icon_set, previous_icon)
44
+ if File.exist?(previous_icon_file) and !scaled_image_name.eql?(previous_icon)
45
+ FileUtils.rm(previous_icon_file)
46
+ end
47
+ end
48
+
49
+ image['filename'] = scaled_image_name
50
+
51
+ else
52
+ say_error 'Failed during the conversion process for some reason...' and abort
53
+ end
54
+ end
55
+
56
+ # Output the new JSON contents
57
+ File.open(@contents_file,"w") do |f|
58
+ f.write(JSON.pretty_generate(contents))
59
+ end
60
+
61
+ say_ok 'Done. Happy Days!'
62
+
63
+ end
64
+
65
+ private
66
+
67
+ def validate_image_magick!
68
+ abort('You need to install Image Magick! Check http://www.imagemagick.org for instructions.') unless system("which convert > /dev/null 2>&1")
69
+ end
70
+
71
+ def validate_icon!
72
+ @icon = File.expand_path(@icon)
73
+ abort("Ops! Can't find the source icon you specified. #{@icon}") unless File.exist?(@icon)
74
+ end
75
+
76
+ def validate_asset_catalog!
77
+ @asset_catalog = File.expand_path(@asset_catalog)
78
+ abort("Ops! Can't find the asset catalog you specified. #{@asset_catalog}") unless File.exist?(@asset_catalog)
79
+ abort("Ops! It does not seem you specified a valid asset catalog. It needs to be the .xcassets directory.") \
80
+ unless File.directory?(@asset_catalog) and File.extname(@asset_catalog).eql?('.xcassets')
81
+ end
82
+
83
+ def determine_icon!
84
+ @icon ||= ask "Source Icon:"
85
+ end
86
+
87
+ def determine_asset_catalog!
88
+ @asset_catalog ||= ask "Asset Catalog:"
89
+ end
90
+
91
+ def determine_icon_set! icon_sets
92
+ @icon_set ||= choose "Select Icon Set:", *icon_sets
93
+ end
94
+
95
+
96
+ end
@@ -0,0 +1,3 @@
1
+ $:.push File.expand_path('../', __FILE__)
2
+
3
+ require 'commands/install'
@@ -0,0 +1,3 @@
1
+ module Appicon
2
+ VERSION = "0.0.1"
3
+ end
data/lib/appicon.rb ADDED
@@ -0,0 +1,5 @@
1
+ require "appicon/version"
2
+
3
+ module Appicon
4
+ # Your code goes here...
5
+ end
metadata ADDED
@@ -0,0 +1,112 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: appicon
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Erik Sundin
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-11-21 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.5'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.5'
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
+ - !ruby/object:Gem::Dependency
42
+ name: commander
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 4.1.2
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 4.1.2
55
+ - !ruby/object:Gem::Dependency
56
+ name: json
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 1.8.1
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 1.8.1
69
+ description:
70
+ email:
71
+ - erik@eriksundin.se
72
+ executables:
73
+ - appicon
74
+ extensions: []
75
+ extra_rdoc_files: []
76
+ files:
77
+ - ".gitignore"
78
+ - Gemfile
79
+ - LICENSE.txt
80
+ - README.md
81
+ - Rakefile
82
+ - appicon.gemspec
83
+ - bin/appicon
84
+ - lib/appicon.rb
85
+ - lib/appicon/commands.rb
86
+ - lib/appicon/commands/install.rb
87
+ - lib/appicon/version.rb
88
+ homepage: https://github.com/eriksundin/appicon
89
+ licenses:
90
+ - MIT
91
+ metadata: {}
92
+ post_install_message:
93
+ rdoc_options: []
94
+ require_paths:
95
+ - lib
96
+ required_ruby_version: !ruby/object:Gem::Requirement
97
+ requirements:
98
+ - - ">="
99
+ - !ruby/object:Gem::Version
100
+ version: '0'
101
+ required_rubygems_version: !ruby/object:Gem::Requirement
102
+ requirements:
103
+ - - ">="
104
+ - !ruby/object:Gem::Version
105
+ version: '0'
106
+ requirements: []
107
+ rubyforge_project:
108
+ rubygems_version: 2.4.1
109
+ signing_key:
110
+ specification_version: 4
111
+ summary: Convert and install iOS App icons into an XCode Asset Catalog.
112
+ test_files: []