/ generate-xcode-imageset
generate-xcode-imageset
 1  #!/usr/bin/env ruby -w
 2  
 3  require 'json'
 4  
 5  def main
 6    while dir = ARGV.shift
 7      unless File.directory? dir
 8        puts "[warn] Skipping non-directory: #{dir}"
 9        next
10      end
11  
12      all_images = Dir[File.join(dir, '*@[23]x.png')].map { |f| File.basename f }
13      image3x = File.basename Dir[File.join(dir, '*@3x.png')].first
14      image2x = File.basename  Dir[File.join(dir, '*@2x.png')].first
15      image1x = (all_images - [image2x, image3x]).first
16      unless [2, 3].include?(all_images.size) && image2x && image3x
17        puts "[warn] Skipping #{dir} because 2x and 3x images are required. 1x image is optional. Max 3 images."
18        next
19      end
20  
21      images = [image1x, image2x, image3x]
22      scale = 0
23      imageset_images = images
24        .map { |filename|
25          scale += 1
26          filename && {
27            idiom: 'universal',
28            filename: filename,
29            scale: "#{scale}x"
30          }
31        }
32        .compact
33      imageset = {
34        images: imageset_images,
35        info: {
36          version: 1,
37          author: 'generate-xcode-imageset'
38        }
39      }
40      json = JSON.pretty_generate(imageset)
41      path = File.join(dir, 'Contents.json')
42      File.write(path, json)
43      images_written = images.compact
44      puts "* Wrote #{images_written.size} images to #{path}: #{images_written.join(', ')}"
45    end
46  end
47  
48  main if $0 == __FILE__