high_five 0.3.15 → 0.3.16

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ce120807357b8c42d5ceea9c97a63113ba738bab
4
- data.tar.gz: 809fe86d85b8da73e3a169a58eca923b438d2d54
3
+ metadata.gz: 616b4f628f3d4af0087fee42e660347c3a0c7225
4
+ data.tar.gz: 9ecf7fe5a40e59c1fa767e56b33143b6a8b7d503
5
5
  SHA512:
6
- metadata.gz: 35d774449fd23bb9427965a7642192e50c9868fed24b9351fbc55c0ef0600c83f96538654766f025b48c269ed97d2a89124a2a41633e0885ecc87d7a91a4ed0d
7
- data.tar.gz: 5ff881e17bdf6010174fc0d4f0b937b86537980109ce11abbb9f49db3a6439c880e8b9fb71e53c88aa79aaedf6b54f3f2b958d4f012f7bd2d423b76eddfc101e
6
+ metadata.gz: 106943f47660d4da515f516d06b5982b542b1c60ad3337e4e99f97045b00dd5615c0e0af813cb8a307c3e53e2f4fd4ccaf0ed78dd0803911af34a7cdc1f5b595
7
+ data.tar.gz: f24ca6f27af4760e43592b7c1781fef4fa9fed98f554d687f8162bc44224b6ea81e568638ac3d121e2031e7e984c288c80046b4e204819f88cfffe6f51b1d376
@@ -34,6 +34,14 @@ module HighFive
34
34
  end
35
35
  end
36
36
 
37
+ def gradle_file_path
38
+ if options[:platform_path]
39
+ gradle_path = Dir[File.join(options[:platform_path], "/app/build.gradle")][0]
40
+ return gradle_path if gradle_path && File.exists?(gradle_path)
41
+ end
42
+ return nil
43
+ end
44
+
37
45
  def res_map
38
46
  {
39
47
  ldpi: 36,
@@ -13,7 +13,82 @@ module HighFive
13
13
  source = ChunkyPNG::Image.from_file(source_path)
14
14
  source.resize(image.height, image.width).save(image_path)
15
15
  end
16
+ end
17
+
18
+ def generate_splash_screen_image(image_path, logo_path, background)
19
+ raise "Requires RMagick gem" unless rmagick?
20
+ image = ChunkyPNG::Image.from_file(image_path)
21
+ width = image.width
22
+ height = image.height
23
+ source = Magick::Image.new(width, height) { self.background_color = background }
16
24
 
25
+ logo = Magick::Image.read(logo_path).first
26
+ scale_factor = min_scale_factor(logo, 0.75*width, 0.3*height)
27
+
28
+ logo.scale!(scale_factor)
29
+ source.composite!(logo, Magick::CenterGravity, Magick::AtopCompositeOp)
30
+
31
+ source.write(image_path)
32
+ end
33
+
34
+ def generate_ios_splash_screen_image(type, ios_path, path, color)
35
+ raise "Requires RMagick gem" unless rmagick?
36
+ case type
37
+ when 'iphone_portrait_8_retina_hd_5_5'
38
+ width = 1242
39
+ height = 2208
40
+ when 'iphone_portrait_8_retina_hd_4_7'
41
+ width = 750
42
+ height = 1334
43
+ when 'iphone_landscape_8_retina_hd_5_5'
44
+ width = 2208
45
+ height = 1242
46
+ when 'iphone_portrait_1x'
47
+ width = 320
48
+ height = 480
49
+ when 'iphone_portrait_2x', 'android'
50
+ width = 640
51
+ height = 960
52
+ when 'iphone_portrait_retina_4'
53
+ width = 640
54
+ height = 1136
55
+ when 'ios-7-iphone_portrait_2x'
56
+ width = 640
57
+ height = 960
58
+ when 'ios-7-iphone_portrait_retina_4'
59
+ width = 640
60
+ height = 1136
61
+ when 'ipad_portrait_1x'
62
+ width = 768
63
+ height = 1024
64
+ when 'ipad_portrait_2x'
65
+ width = 1536
66
+ height = 2048
67
+ when 'ipad_landscape_1x'
68
+ width = 1024
69
+ height = 768
70
+ when 'ipad_landscape_2x'
71
+ width = 2048
72
+ height = 1536
73
+ when 'ipad_portrait_without_status_bar_5_6_1x'
74
+ width = 768
75
+ height = 1004
76
+ when 'ipad_portrait_without_status_bar_5_6_2x'
77
+ width = 1536
78
+ height = 2008
79
+ when 'ipad_landscape_without_status_bar_5_6_1x'
80
+ width = 1024
81
+ height = 748
82
+ when 'ipad_landscape_without_status_bar_5_6_2x'
83
+ width = 2048
84
+ height = 1496
85
+ end
86
+
87
+ filename = "#{type}.png"
88
+ splash_path = Dir.glob("#{ios_path}/**/Images.xcassets/LaunchImage.launchimage").first + "/#{filename}"
89
+ puts "Creating #{splash_path}"
90
+ Magick::Image.new(width, height).write(splash_path)
91
+ generate_splash_screen_image splash_path, path, color
17
92
  end
18
93
 
19
94
  private
@@ -28,5 +103,13 @@ module HighFive
28
103
  false
29
104
  end
30
105
  end
106
+
107
+ def min_scale_factor(image, max_width, max_height)
108
+ width_scale_factor = max_width / image.columns
109
+ height_scale_factor = max_height / image.rows
110
+ sf = [width_scale_factor, height_scale_factor].min
111
+ puts "Warning: upscaling image for splash screen" if sf > 1.0
112
+ sf
113
+ end
31
114
  end
32
115
  end
@@ -33,6 +33,9 @@ module HighFive
33
33
  xml = Nokogiri::XML(file)
34
34
 
35
35
  # replace \n and any additional whitespace with a space
36
+ puts "========================================="
37
+ puts "#{android_manifest_path}"
38
+ puts "========================================="
36
39
  xml.xpath("//manifest").each do |node|
37
40
  if (options[:version])
38
41
  old = node["android:versionName"]
@@ -46,15 +49,32 @@ module HighFive
46
49
  end
47
50
  end
48
51
 
52
+ if gradle_file_path
53
+ puts "========================================="
54
+ puts "#{gradle_file_path}"
55
+ puts "========================================="
56
+ gradle_file = File.read(gradle_file_path)
57
+
58
+ old = gradle_file.match(/versionName\s"(.+)"$/)[1]
59
+ gradle_file.gsub!(/versionName\s"(.+)"$/, "versionName \"#{options[:version]}\"")
60
+ puts "Setting version #{old} => #{options[:version]}"
61
+
62
+ old = gradle_file.match(/versionCode\s(\d+)$/)[1]
63
+ gradle_file.gsub!(/versionCode\s\d+$/, "versionCode #{options[:build_number]}")
64
+ puts "Setting versionCode #{old} => #{options[:build_number]}"
65
+
66
+ File.open(gradle_file_path, "w") do |f|
67
+ f.write gradle_file
68
+ end
69
+ end
70
+
49
71
  # save the output into a new file
50
72
  File.open(android_manifest_path, "w") do |f|
51
73
  f.write xml.to_xml
52
74
  end
53
75
  end
54
76
 
55
- desc "set_icon", "Generate app icons from base png image"
56
- method_option :platform_path, desc: "Path to the ios or android directory"
57
- method_option :environment, :aliases => '-e', :desc => "Set environment"
77
+ desc "set_icon", "Generate and replace app icons from base png image"
58
78
  def set_icon(path)
59
79
  image = ChunkyPNG::Image.from_file(path)
60
80
 
@@ -77,6 +97,23 @@ module HighFive
77
97
  end
78
98
  end
79
99
 
100
+ desc "generate_splash_screen", "Generate and replace splash screens from logo and background color"
101
+ method_option :color, desc: "Background color"
102
+ def generate_splash_screen(path)
103
+ image = ChunkyPNG::Image.from_file(path)
104
+
105
+ splash_name = 'screen.png'
106
+
107
+ drawable_dir = File.join File.dirname(android_manifest_path), 'res'
108
+ Dir.glob(File.join drawable_dir, "drawable*").each do |dir|
109
+ splash_path = File.join(dir, splash_name)
110
+ if File.exists?(splash_path)
111
+ generate_splash_screen_image splash_path, path, options[:color] || "#ffffff"
112
+ puts "Writing #{splash_path}"
113
+ end
114
+ end
115
+ end
116
+
80
117
  private
81
118
  def config
82
119
  base_config.build_platform_config(:android).build_platform_config(options[:environment])
@@ -45,9 +45,16 @@ module HighFive
45
45
  method_option :target, :aliases => '-t', :desc => "Use a specific target (i.e. <Target>.plist)"
46
46
  method_option :platform_path, :desc => "Path to ios or android directory"
47
47
  def set_icon(path)
48
- icon_files = plist['CFBundleIcons']["CFBundlePrimaryIcon"]["CFBundleIconFiles"]
49
- icon_files += [ plist['CFBundleIconFile'] ]
50
- icon_files += plist['CFBundleIcons~ipad']["CFBundlePrimaryIcon"]["CFBundleIconFiles"]
48
+ begin
49
+ icon_files = plist['CFBundleIcons']["CFBundlePrimaryIcon"]["CFBundleIconFiles"]
50
+ icon_files += [ plist['CFBundleIconFile'] ]
51
+ icon_files += plist['CFBundleIcons~ipad']["CFBundlePrimaryIcon"]["CFBundleIconFiles"]
52
+ rescue
53
+ icon_files = []
54
+ end
55
+ if icon_files.empty?
56
+ icon_files = Dir.glob("#{ios_path}/**/Images.xcassets/AppIcon.appiconset/*.png")
57
+ end
51
58
  icon_files.each do |icon_entry|
52
59
  icon_file_name = icon_entry
53
60
  unless icon_entry.end_with? ".png"
@@ -58,6 +65,7 @@ module HighFive
58
65
  # This helps with multi-target apps
59
66
  old_icon_path = Dir[File.join(ios_path, "#{target}/**/#{icon_file_name}")].first
60
67
  old_icon_path = Dir[File.join(ios_path, "**/#{icon_file_name}")].first if old_icon_path.nil?
68
+ old_icon_path = Dir[File.join(icon_entry)].first if old_icon_path.nil?
61
69
 
62
70
  if old_icon_path.nil?
63
71
  puts "Skipping #{icon_entry} because the file is missing. This will cause problems with app store submission"
@@ -70,6 +78,37 @@ module HighFive
70
78
  end
71
79
  end
72
80
 
81
+ desc "generate_splash_screen", "Generate and replace splash screens from logo and background color"
82
+ method_option :color, desc: "Background color"
83
+ def generate_splash_screen(path)
84
+ image = ChunkyPNG::Image.from_file(path)
85
+
86
+ splashes_to_make = [
87
+ 'iphone_portrait_8_retina_hd_5_5',
88
+ 'iphone_portrait_8_retina_hd_4_7',
89
+ 'iphone_landscape_8_retina_hd_5_5',
90
+ 'iphone_portrait_1x',
91
+ 'iphone_portrait_2x',
92
+ 'iphone_portrait_retina_4',
93
+ 'ios-7-iphone_portrait_2x',
94
+ 'ios-7-iphone_portrait_retina_4',
95
+ 'ipad_portrait_1x',
96
+ 'ipad_portrait_2x',
97
+ 'ipad_landscape_1x',
98
+ 'ipad_landscape_2x',
99
+ 'ipad_portrait_without_status_bar_5_6_1x',
100
+ 'ipad_portrait_without_status_bar_5_6_2x',
101
+ 'ipad_landscape_without_status_bar_5_6_1x',
102
+ 'ipad_landscape_without_status_bar_5_6_2x'
103
+ ]
104
+
105
+ splashes_to_make.each do |type|
106
+ generate_ios_splash_screen_image(type, ios_path, path, options[:color] || "#ffffff")
107
+ end
108
+
109
+ puts "Make sure you assign them in xcode if this is the first time you generated these"
110
+ end
111
+
73
112
  private
74
113
 
75
114
  def set_plist_property(key, value)
@@ -98,4 +137,4 @@ module HighFive
98
137
  end
99
138
  end
100
139
  end
101
- end
140
+ end
@@ -1,3 +1,3 @@
1
1
  module HighFive
2
- VERSION = "0.3.15"
2
+ VERSION = "0.3.16"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: high_five
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.15
4
+ version: 0.3.16
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brian Samson
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-06-30 00:00:00.000000000 Z
11
+ date: 2016-07-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: multi_json