acbaker 0.0.2

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
+ SHA1:
3
+ metadata.gz: 1b759222db16f3af1eb44448d91812d76ab1c69e
4
+ data.tar.gz: b691dcb923103b569450d709f5b1503f3673d73f
5
+ SHA512:
6
+ metadata.gz: 1f70abd07c2e3c19e00069530294820fb0ccb2ed1b7bf871ff0aaac7377fcebeffc64a7b7fe986ce942ce27e165e135c6fc10c703f9829d31d2a67f7dae268aa
7
+ data.tar.gz: 99e29709f2decbe047e2b345812e244b4c60f283f0ec4dd901413959ec22f136fb5467e3d3b8ac33b8ef28a1131e1570f993a9c7c5362440bd3b607f4d087d9b
data/.gitignore ADDED
@@ -0,0 +1,3 @@
1
+ .DS_Store
2
+ tmp/*
3
+ acbaker-*.gem
data/README.md ADDED
@@ -0,0 +1,33 @@
1
+ Asset Catalog Baker - Generate Asset Catalogs on the fly
2
+ ========================================================
3
+
4
+ **Generate Asset Catalog Images from source files to use with XCode**
5
+ <http://www.magloft.com>
6
+
7
+
8
+ INSTALLATION
9
+ ------------
10
+
11
+ Install the gem for command line usage or inclusion in your ruby project:
12
+
13
+ gem install acbaker
14
+
15
+ USAGE
16
+ -----
17
+
18
+ acbaker --help
19
+
20
+ CHANGELOG
21
+ ---------
22
+
23
+ * **0.0.2**
24
+ * Fix convert results
25
+
26
+ * **0.0.1**
27
+ * Initial release
28
+
29
+ LICENSE
30
+ -------
31
+
32
+ _Copyright (C) 2014, Tobias Strebitzer_
33
+ _Licensed under **BSD Opensource License** (free for personal and commercial use)_
data/Rakefile ADDED
@@ -0,0 +1,9 @@
1
+ require 'fileutils'
2
+ require 'json'
3
+ require 'rake/testtask'
4
+
5
+ Rake::TestTask.new do |t|
6
+ t.libs << 'test'
7
+ end
8
+
9
+ task default: %w[test]
data/acbaker.gemspec ADDED
@@ -0,0 +1,23 @@
1
+ # -*- encoding: utf-8 -*-
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'acbaker/version'
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = "acbaker"
8
+ s.version = Acbaker::VERSION
9
+ s.licenses = ["BSD-3-Clause"]
10
+ s.platform = Gem::Platform::RUBY
11
+ s.authors = ["Tobias Strebitzer"]
12
+ s.email = ["tobias.strebitzer@magloft.com"]
13
+ s.homepage = "http://www.magloft.com"
14
+ s.summary = "Convert any source images into xcode asset catalogs."
15
+ s.description = "This gem allows easy conversion and management of xcode asset catalogs."
16
+ s.required_rubygems_version = '>= 1.3.6'
17
+ s.add_dependency "commander", '~> 4.1'
18
+ s.add_dependency 'json', '~> 1.8'
19
+ s.add_development_dependency "rake", '~> 10.0'
20
+ s.files = `git ls-files`.split("\n")
21
+ s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
22
+ s.require_path = 'lib'
23
+ end
data/bin/acbaker ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+ require 'commander/import'
3
+ $:.push File.expand_path("../../lib", __FILE__)
4
+ require 'acbaker'
5
+
6
+ program :version, Acbaker::VERSION
7
+ program :description, 'Convert any source images into xcode asset catalogs.'
8
+ program :help, 'Author', 'Tobias Strebitzer <tobias.strebitzer@magloft.com>'
9
+ program :help, 'Website', 'http://www.magloft.com'
10
+ program :help_formatter, :compact
11
+
12
+ default_command :help
13
+
14
+ require 'acbaker/commands'
@@ -0,0 +1,102 @@
1
+ require 'json'
2
+
3
+ module Acbaker
4
+ class AssetPack
5
+ attr_reader :type, :images
6
+
7
+ def initialize(type, options={})
8
+ @type = type
9
+ if options[:json]
10
+ @json_data = options[:json]
11
+ else
12
+ @json_file = File.join(File.dirname(File.expand_path(__FILE__)), "config", "#{type}.json")
13
+ @json_data = JSON.parse(File.open(@json_file).read)
14
+ end
15
+ @images = @json_data['images']
16
+ @options = self.defaults().merge(options)
17
+ end
18
+
19
+ def defaults
20
+ {json: false}
21
+ end
22
+
23
+ def process(source_image_file, target_directory, &block)
24
+
25
+ # Define variables
26
+ json_output_file = File.join(target_directory, "Contents.json")
27
+
28
+ # Loop through images
29
+ @json_data['images'].each_with_index do |image_spec, index|
30
+
31
+ # Get size
32
+ (width_str, height_str) = image_spec['size'].split('x')
33
+ scale = image_spec['scale'].gsub('x', '').to_i
34
+ width = width_str.to_i * scale
35
+ height = height_str.to_i * scale
36
+ size_max = [width, height].max
37
+ base_width = width / scale
38
+ base_height = height / scale
39
+
40
+ # Get version
41
+ if image_spec['minimum-system-version'].nil?
42
+ version = 'ios56'
43
+ elsif image_spec['minimum-system-version'] == '8.0'
44
+ version = 'ios8'
45
+ elsif image_spec['minimum-system-version'] == '7.0'
46
+ version = 'ios78'
47
+ else
48
+ version = 'ios56'
49
+ end
50
+
51
+ # Generate filename
52
+ filename_array = []
53
+ filename_array.push(@type)
54
+ filename_array.push(image_spec['idiom']) if image_spec['idiom']
55
+ filename_array.push(image_spec['orientation']) if image_spec['orientation']
56
+ filename_array.push(version)
57
+
58
+ # Add subtype
59
+ if image_spec['subtype']
60
+ if image_spec['subtype'] == '736h'
61
+ filename_array.push('retina-hd-55')
62
+ elsif image_spec['subtype'] == '667h'
63
+ filename_array.push('retina-hd-47')
64
+ else
65
+ filename_array.push(image_spec['subtype'])
66
+ end
67
+ end
68
+
69
+ # Add extent
70
+ filename_array.push(image_spec['extent']) if image_spec['extent']
71
+
72
+ # Add size
73
+ filename_array.push(image_spec['size'])
74
+
75
+ if scale > 1
76
+ filename = "#{filename_array.join('-')}@#{scale}x.png"
77
+ else
78
+ filename = "#{filename_array.join('-')}.png"
79
+ end
80
+
81
+ # Generate image
82
+ cmd = "convert #{source_image_file} -resize #{width}x#{height}^ -gravity Center -crop #{width}x#{height}+0+0 +repage #{target_directory}/#{filename}"
83
+ system(cmd)
84
+
85
+ # Trigger Callback proc
86
+ block.call("#{target_directory}/#{filename}", index+1) if not block.nil?
87
+
88
+ # Update json data
89
+ image_spec['filename'] = filename
90
+
91
+ end
92
+
93
+ # Save Contents.json
94
+ File.open(json_output_file,"w") do |f|
95
+ f.write(JSON.pretty_generate(@json_data))
96
+ end
97
+
98
+ true
99
+ end
100
+
101
+ end
102
+ end
@@ -0,0 +1,119 @@
1
+ command :'pack' do |c|
2
+ c.syntax = "acbaker pack [image] [output directory]"
3
+ c.summary = "Convert an image into a xcode asset catalogs"
4
+ c.description = "The type will be autodetected by filename, and can be overwritten using the --type option"
5
+ c.option '--type STRING', String, 'Specify asset pack type'
6
+ c.option '--json STRING', String, 'Specify custom json file path'
7
+ c.option '--force', String, 'Delete and recreate output directory (careful!)'
8
+ global_option '--force'
9
+
10
+ c.action do |args, options|
11
+
12
+ # Prepare arguments
13
+ @image = args[0]
14
+ @output_directory = args[1]
15
+ @type = options.type
16
+ @json = options.json
17
+ @force = options.force
18
+
19
+ # Validate
20
+ validate_image_magick!
21
+ validate_image!
22
+ validate_json!
23
+ validate_type!
24
+ validate_output_directory!
25
+
26
+ # Initialize packer
27
+ asset_pack = Acbaker::AssetPack.new(@type, {
28
+ json: JSON.parse(File.open(@json).read)
29
+ })
30
+
31
+ # Pack assets
32
+ bar = ProgressBar.new(asset_pack.images.size)
33
+ bar.show
34
+ asset_pack.process(@image, @output_directory) do |path, progress|
35
+ bar.increment
36
+ end
37
+
38
+ say_ok 'Your assets were successfully packed!'
39
+
40
+ end
41
+
42
+ private
43
+
44
+ def validate_image_magick!
45
+ abort('You need to install Image Magick! Check http://www.imagemagick.org for instructions.') unless system("which convert > /dev/null 2>&1")
46
+ end
47
+
48
+ def validate_image!
49
+
50
+ # validate image is set
51
+ abort("Error: no image specified.") if @image.nil?
52
+
53
+ # validate image exists
54
+ abort("Error: can't find the image you specified. #{@image}") unless File.exist?(@image) and File.file?(@image)
55
+
56
+ end
57
+
58
+ def validate_type!
59
+ if not @type
60
+ # Detect from image
61
+ token = @image.split('/')[-1].split('.')[0].downcase.to_sym
62
+ @type = {
63
+ appicon: :AppIcon,
64
+ launchimage: :LaunchImage,
65
+ icon: :AppIcon,
66
+ launch: :LaunchImage
67
+ }[token]
68
+ end
69
+
70
+ if not @type and @output_directory
71
+ # Detect from directory
72
+ token = @output_directory.gsub('.', '').downcase.to_sym
73
+ @type = {
74
+ appiconappiconset: :AppIcon,
75
+ appicon: :AppIcon,
76
+ launchimagelaunchimage: :LaunchImage,
77
+ launchimage: :LaunchImage
78
+ }[token]
79
+ end
80
+
81
+ abort("error: Could not detect asset type.") if not @type
82
+
83
+ end
84
+
85
+ def validate_json!
86
+ if @json
87
+ abort("error: JSON file not found.") if not File.exist?(@json) or not File.file?(@json)
88
+ begin
89
+ JSON.parse(File.open(@json).read)
90
+ rescue Exception => e
91
+ abort("error: invalid JSON file: #{@json}")
92
+ end
93
+ @type = :Custom if not @type
94
+ end
95
+ end
96
+
97
+ def validate_output_directory!
98
+ if not @output_directory
99
+ @output_directory = {
100
+ AppIcon: "AppIcon.appiconset",
101
+ LaunchImage: "LaunchImage.launchimage"
102
+ }[@type]
103
+ end
104
+
105
+ # Create custom output directory if type is set
106
+ @output_directory = "#{@type}.imageset" if not @output_directory and @type
107
+
108
+ abort("Error: No output directory specified or detected.") if @output_directory.nil?
109
+ parent_directory = File.expand_path(@output_directory).split("/")[0..-2].join("/")
110
+ abort("Error: Parent directory '#{parent_directory}' does not exist.") unless File.exist?(parent_directory) and File.directory?(parent_directory)
111
+
112
+ # Prepare output directory
113
+ if @force
114
+ FileUtils.rm_rf(@output_directory) if File.directory?(@output_directory)
115
+ end
116
+ FileUtils.mkdir(@output_directory) if not File.directory?(@output_directory)
117
+ end
118
+
119
+ end
@@ -0,0 +1,2 @@
1
+ $:.push File.expand_path('../', __FILE__)
2
+ require 'commands/pack'
@@ -0,0 +1,110 @@
1
+ {
2
+ "images" : [
3
+ {
4
+ "size" : "29x29",
5
+ "idiom" : "iphone",
6
+ "filename" : "iPhoneSettings-29x29.png",
7
+ "scale" : "1x"
8
+ },
9
+ {
10
+ "size" : "29x29",
11
+ "idiom" : "iphone",
12
+ "filename" : "iPhoneSettings-29x29@2x.png",
13
+ "scale" : "2x"
14
+ },
15
+ {
16
+ "size" : "40x40",
17
+ "idiom" : "iphone",
18
+ "filename" : "iPhoneSpotlight-40x40@2x.png",
19
+ "scale" : "2x"
20
+ },
21
+ {
22
+ "size" : "57x57",
23
+ "idiom" : "iphone",
24
+ "filename" : "iPhoneApp-57x57.png",
25
+ "scale" : "1x"
26
+ },
27
+ {
28
+ "size" : "57x57",
29
+ "idiom" : "iphone",
30
+ "filename" : "iPhoneApp-57x57@2x.png",
31
+ "scale" : "2x"
32
+ },
33
+ {
34
+ "size" : "60x60",
35
+ "idiom" : "iphone",
36
+ "filename" : "iPhoneApp-60x60@2x.png",
37
+ "scale" : "2x"
38
+ },
39
+ {
40
+ "size" : "60x60",
41
+ "idiom" : "iphone",
42
+ "filename" : "iPhoneApp-60x60@3x.png",
43
+ "scale" : "3x"
44
+ },
45
+ {
46
+ "size" : "29x29",
47
+ "idiom" : "ipad",
48
+ "filename" : "iPadSettings-29x29.png",
49
+ "scale" : "1x"
50
+ },
51
+ {
52
+ "size" : "29x29",
53
+ "idiom" : "ipad",
54
+ "filename" : "iPadSettings-29x29@2x.png",
55
+ "scale" : "2x"
56
+ },
57
+ {
58
+ "size" : "40x40",
59
+ "idiom" : "ipad",
60
+ "filename" : "iPadSpotlight-40x40.png",
61
+ "scale" : "1x"
62
+ },
63
+ {
64
+ "size" : "40x40",
65
+ "idiom" : "ipad",
66
+ "filename" : "iPadSpotlight-40x40@2x.png",
67
+ "scale" : "2x"
68
+ },
69
+ {
70
+ "size" : "50x50",
71
+ "idiom" : "ipad",
72
+ "filename" : "iPadSpotlight-50x50.png",
73
+ "scale" : "1x"
74
+ },
75
+ {
76
+ "size" : "50x50",
77
+ "idiom" : "ipad",
78
+ "filename" : "iPadSpotlight-50x50@2x.png",
79
+ "scale" : "2x"
80
+ },
81
+ {
82
+ "size" : "72x72",
83
+ "idiom" : "ipad",
84
+ "filename" : "iPadApp-72x72.png",
85
+ "scale" : "1x"
86
+ },
87
+ {
88
+ "size" : "72x72",
89
+ "idiom" : "ipad",
90
+ "filename" : "iPadApp-72x72@2x.png",
91
+ "scale" : "2x"
92
+ },
93
+ {
94
+ "size" : "76x76",
95
+ "idiom" : "ipad",
96
+ "filename" : "iPadApp-76x76.png",
97
+ "scale" : "1x"
98
+ },
99
+ {
100
+ "size" : "76x76",
101
+ "idiom" : "ipad",
102
+ "filename" : "iPadApp-76x76@2x.png",
103
+ "scale" : "2x"
104
+ }
105
+ ],
106
+ "info" : {
107
+ "version" : 1,
108
+ "author" : "xcode"
109
+ }
110
+ }
@@ -0,0 +1,162 @@
1
+ {
2
+ "images" : [
3
+ {
4
+ "size" : "414x736",
5
+ "orientation" : "portrait",
6
+ "idiom" : "iphone",
7
+ "extent" : "full-screen",
8
+ "minimum-system-version" : "8.0",
9
+ "subtype" : "736h",
10
+ "scale" : "3x"
11
+ },
12
+ {
13
+ "size" : "736x414",
14
+ "extent" : "full-screen",
15
+ "idiom" : "iphone",
16
+ "subtype" : "736h",
17
+ "minimum-system-version" : "8.0",
18
+ "orientation" : "landscape",
19
+ "scale" : "3x"
20
+ },
21
+ {
22
+ "size" : "375x667",
23
+ "extent" : "full-screen",
24
+ "idiom" : "iphone",
25
+ "subtype" : "667h",
26
+ "minimum-system-version" : "8.0",
27
+ "orientation" : "portrait",
28
+ "scale" : "2x"
29
+ },
30
+ {
31
+ "size" : "320x480",
32
+ "orientation" : "portrait",
33
+ "idiom" : "iphone",
34
+ "extent" : "full-screen",
35
+ "minimum-system-version" : "7.0",
36
+ "scale" : "2x"
37
+ },
38
+ {
39
+ "size" : "320x568",
40
+ "extent" : "full-screen",
41
+ "idiom" : "iphone",
42
+ "subtype" : "retina4",
43
+ "minimum-system-version" : "7.0",
44
+ "orientation" : "portrait",
45
+ "scale" : "2x"
46
+ },
47
+ {
48
+ "size" : "768x1024",
49
+ "orientation" : "portrait",
50
+ "idiom" : "ipad",
51
+ "extent" : "full-screen",
52
+ "minimum-system-version" : "7.0",
53
+ "scale" : "1x"
54
+ },
55
+ {
56
+ "size" : "1024x768",
57
+ "orientation" : "landscape",
58
+ "idiom" : "ipad",
59
+ "extent" : "full-screen",
60
+ "minimum-system-version" : "7.0",
61
+ "scale" : "1x"
62
+ },
63
+ {
64
+ "size" : "768x1024",
65
+ "orientation" : "portrait",
66
+ "idiom" : "ipad",
67
+ "extent" : "full-screen",
68
+ "minimum-system-version" : "7.0",
69
+ "scale" : "2x"
70
+ },
71
+ {
72
+ "size" : "1024x768",
73
+ "orientation" : "landscape",
74
+ "idiom" : "ipad",
75
+ "extent" : "full-screen",
76
+ "minimum-system-version" : "7.0",
77
+ "scale" : "2x"
78
+ },
79
+ {
80
+ "size" : "320x480",
81
+ "orientation" : "portrait",
82
+ "idiom" : "iphone",
83
+ "extent" : "full-screen",
84
+ "scale" : "1x"
85
+ },
86
+ {
87
+ "size" : "320x480",
88
+ "orientation" : "portrait",
89
+ "idiom" : "iphone",
90
+ "extent" : "full-screen",
91
+ "scale" : "2x"
92
+ },
93
+ {
94
+ "size" : "320x568",
95
+ "orientation" : "portrait",
96
+ "idiom" : "iphone",
97
+ "extent" : "full-screen",
98
+ "subtype" : "retina4",
99
+ "scale" : "2x"
100
+ },
101
+ {
102
+ "size" : "768x1004",
103
+ "orientation" : "portrait",
104
+ "idiom" : "ipad",
105
+ "extent" : "to-status-bar",
106
+ "scale" : "1x"
107
+ },
108
+ {
109
+ "size" : "768x1024",
110
+ "orientation" : "portrait",
111
+ "idiom" : "ipad",
112
+ "extent" : "full-screen",
113
+ "scale" : "1x"
114
+ },
115
+ {
116
+ "size" : "1024x748",
117
+ "orientation" : "landscape",
118
+ "idiom" : "ipad",
119
+ "extent" : "to-status-bar",
120
+ "scale" : "1x"
121
+ },
122
+ {
123
+ "size" : "1024x768",
124
+ "orientation" : "landscape",
125
+ "idiom" : "ipad",
126
+ "extent" : "full-screen",
127
+ "scale" : "1x"
128
+ },
129
+ {
130
+ "size" : "768x1004",
131
+ "orientation" : "portrait",
132
+ "idiom" : "ipad",
133
+ "extent" : "to-status-bar",
134
+ "scale" : "2x"
135
+ },
136
+ {
137
+ "size" : "768x1024",
138
+ "orientation" : "portrait",
139
+ "idiom" : "ipad",
140
+ "extent" : "full-screen",
141
+ "scale" : "2x"
142
+ },
143
+ {
144
+ "size" : "1024x748",
145
+ "orientation" : "landscape",
146
+ "idiom" : "ipad",
147
+ "extent" : "to-status-bar",
148
+ "scale" : "2x"
149
+ },
150
+ {
151
+ "size" : "1024x768",
152
+ "orientation" : "landscape",
153
+ "idiom" : "ipad",
154
+ "extent" : "full-screen",
155
+ "scale" : "2x"
156
+ }
157
+ ],
158
+ "info" : {
159
+ "version" : 1,
160
+ "author" : "xcode"
161
+ }
162
+ }
@@ -0,0 +1,3 @@
1
+ module Acbaker
2
+ VERSION = "0.0.2"
3
+ end
data/lib/acbaker.rb ADDED
@@ -0,0 +1,6 @@
1
+ require "acbaker/version"
2
+ require 'acbaker/asset_pack'
3
+
4
+ module Acbaker
5
+
6
+ end
Binary file
Binary file
@@ -0,0 +1,24 @@
1
+ require 'minitest/autorun'
2
+ require 'acbaker'
3
+
4
+ class AcbakerTest < Minitest::Test
5
+
6
+ def test_initialize
7
+ FileUtils.mkdir("tmp") if not File.directory?("tmp")
8
+ asset_pack = Acbaker::AssetPack.new(:AppIcon)
9
+ assert_equal :AppIcon, asset_pack.type
10
+ end
11
+
12
+ def test_appicon
13
+ FileUtils.mkdir_p("tmp/AppIcon.appiconset") if not File.directory?("tmp/AppIcon.appiconset")
14
+ asset_pack = Acbaker::AssetPack.new(:AppIcon)
15
+ asset_pack.process("test/assets/AppIcon.png", "tmp/AppIcon.appiconset")
16
+ end
17
+
18
+ def test_launchimage
19
+ FileUtils.mkdir_p("tmp/LaunchImage.launchimage") if not File.directory?("tmp/LaunchImage.launchimage")
20
+ asset_pack = Acbaker::AssetPack.new(:LaunchImage)
21
+ asset_pack.process("test/assets/LaunchImage.png", "tmp/LaunchImage.launchimage")
22
+ end
23
+
24
+ end
metadata ADDED
@@ -0,0 +1,102 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: acbaker
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - Tobias Strebitzer
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-01-15 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: commander
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '4.1'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '4.1'
27
+ - !ruby/object:Gem::Dependency
28
+ name: json
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: '1.8'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: '1.8'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: '10.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: '10.0'
55
+ description: This gem allows easy conversion and management of xcode asset catalogs.
56
+ email:
57
+ - tobias.strebitzer@magloft.com
58
+ executables:
59
+ - acbaker
60
+ extensions: []
61
+ extra_rdoc_files: []
62
+ files:
63
+ - .gitignore
64
+ - README.md
65
+ - Rakefile
66
+ - acbaker.gemspec
67
+ - bin/acbaker
68
+ - lib/acbaker.rb
69
+ - lib/acbaker/asset_pack.rb
70
+ - lib/acbaker/commands.rb
71
+ - lib/acbaker/commands/pack.rb
72
+ - lib/acbaker/config/AppIcon.json
73
+ - lib/acbaker/config/LaunchImage.json
74
+ - lib/acbaker/version.rb
75
+ - test/assets/AppIcon.png
76
+ - test/assets/LaunchImage.png
77
+ - test/test_acbaker.rb
78
+ homepage: http://www.magloft.com
79
+ licenses:
80
+ - BSD-3-Clause
81
+ metadata: {}
82
+ post_install_message:
83
+ rdoc_options: []
84
+ require_paths:
85
+ - lib
86
+ required_ruby_version: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - '>='
89
+ - !ruby/object:Gem::Version
90
+ version: '0'
91
+ required_rubygems_version: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - '>='
94
+ - !ruby/object:Gem::Version
95
+ version: 1.3.6
96
+ requirements: []
97
+ rubyforge_project:
98
+ rubygems_version: 2.4.5
99
+ signing_key:
100
+ specification_version: 4
101
+ summary: Convert any source images into xcode asset catalogs.
102
+ test_files: []