frameit 2.4.1 → 2.4.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1a0fbeeee7a265d5f757d6172db851a1db0974a8
4
- data.tar.gz: 88ca5a4d0268d03ce589981c986bc1635704caf7
3
+ metadata.gz: 51f6e23e8a0eda4b74b3c2088da03c61ef8e98e5
4
+ data.tar.gz: 424487c213ded6efd87fb8e3f6dedfe6c090e063
5
5
  SHA512:
6
- metadata.gz: 864d6698f6a6fea4c0a9ba5892b37391bec7440644112bdd36ec7e9d790a08a9d0fbc999c6e26bb783144168ce2225a0f65a5cd9f9d567032b68b3703a6270f6
7
- data.tar.gz: cdc9caa978480de1cbb4062e74fd77efe29c156047edec90857f4326a0989073226400906b65958616ad96d00d941adf31042ca9f0f6f374fad3f70a67ca9786
6
+ metadata.gz: 1a4b71cff4333d074dfa1577fae67ca6675b55022e50048222017694856fa3e6af54921d7f210245673e393d77a7d01ba4e6f801dc598ba651aedf4b97cfd1d6
7
+ data.tar.gz: 33c0fe594cb17ebf08aa5a2a207eda07f53204fe03181f3b6450869b0958a29a9dfb7ed754984bbc466f5ec2c83f9fde4b6f696eadb328ab774bea4530220c33
data/README.md CHANGED
@@ -29,14 +29,14 @@
29
29
  frameit
30
30
  ============
31
31
 
32
- [![Twitter: @KauseFx](https://img.shields.io/badge/contact-@KrauseFx-blue.svg?style=flat)](https://twitter.com/KrauseFx)
33
- [![License](https://img.shields.io/badge/license-MIT-green.svg?style=flat)](https://github.com/KrauseFx/frameit/blob/master/LICENSE)
32
+ [![Twitter: @KauseFx](https://img.shields.io/badge/contact-@FastlaneTools-blue.svg?style=flat)](https://twitter.com/FastlaneTools)
33
+ [![License](https://img.shields.io/badge/license-MIT-green.svg?style=flat)](https://github.com/fastlane/frameit/blob/master/LICENSE)
34
34
  [![Gem](https://img.shields.io/gem/v/frameit.svg?style=flat)](http://rubygems.org/gems/frameit)
35
35
  [![Build Status](https://img.shields.io/travis/fastlane/frameit/master.svg?style=flat)](https://travis-ci.org/fastlane/frameit)
36
36
 
37
37
  ###### Quickly put your screenshots into the right device frames
38
38
 
39
- Get in contact with the developer on Twitter: [@KrauseFx](https://twitter.com/KrauseFx)
39
+ Get in contact with the developer on Twitter: [@FastlaneTools](https://twitter.com/FastlaneTools)
40
40
 
41
41
 
42
42
  -------
@@ -99,7 +99,7 @@ You only have to do this once per computer.
99
99
  - Press ```Enter```. The [Apple page](https://developer.apple.com/app-store/marketing/guidelines/#images) to download the images should open in your browser.
100
100
  - Download the devices you want to use
101
101
  - Press ```Enter```
102
- - Unzip and move the content of the zip files to ```~/.frameit/device_frames```
102
+ - Unzip and move the content of the zip files to ```~/.frameit/devices_frames```
103
103
  - Press ```Enter```
104
104
 
105
105
  # Usage
@@ -185,6 +185,9 @@ To define the title and optionally the keyword, put two `.strings` files into th
185
185
 
186
186
  The `keyword.strings` and `title.strings` are standard `.strings` file you already use for your iOS apps, making it easy to use your existing translation service to get localized titles.
187
187
 
188
+ **Note:** These `.strings` files **MUST** be utf-16 encoded. If you are having trouble see [issue #49](https://github.com/fastlane/frameit/issues/49)
189
+
190
+
188
191
  #### Uploading screenshots to iTC
189
192
 
190
193
  Use [deliver](https://github.com/fastlane/deliver) to upload all screenshots to iTunes Connect completely automatically :rocket:
@@ -248,7 +251,7 @@ Check out [`snapshot`](https://github.com/fastlane/snapshot) to automatically ge
248
251
 
249
252
  ## Alternative location to store device_frames
250
253
 
251
- Device frames can also be stored in a ```./fastlane/screenshots/device_frames``` directory if you prefer rather than in the ```~/.frameit/device_frames``` directory. If doing so please be aware that Apple's images are copyrighted and should not be redistributed as part of a repository so you may want to include them in your .gitignore file.
254
+ Device frames can also be stored in a ```./fastlane/screenshots/devices_frames``` directory if you prefer rather than in the ```~/.frameit/device_frames``` directory. If doing so please be aware that Apple's images are copyrighted and should not be redistributed as part of a repository so you may want to include them in your .gitignore file.
252
255
 
253
256
  ## White background of frames
254
257
 
@@ -273,6 +276,9 @@ brew install imagemagick
273
276
  # Need help?
274
277
  Please submit an issue on GitHub and provide information about your setup
275
278
 
279
+ # Code of Conduct
280
+ Help us keep `frameit` open and inclusive. Please read and follow our [Code of Conduct](https://github.com/fastlane/code-of-conduct).
281
+
276
282
  # License
277
283
  This project is licensed under the terms of the MIT license. See the LICENSE file.
278
284
 
data/bin/frameit CHANGED
@@ -15,7 +15,7 @@ class FrameItApplication
15
15
  program :description, 'Quickly put your screenshots into the right device frames'
16
16
  program :help, 'Author', 'Felix Krause <frameit@krausefx.com>'
17
17
  program :help, 'Website', 'https://fastlane.tools'
18
- program :help, 'GitHub', 'https://github.com/krausefx/frameit'
18
+ program :help, 'GitHub', 'https://github.com/fastlane/frameit'
19
19
  program :help_formatter, :compact
20
20
 
21
21
  global_option('--verbose') { $verbose = true }
data/lib/frameit.rb CHANGED
@@ -16,6 +16,7 @@ require 'fastlane_core'
16
16
 
17
17
  module Frameit
18
18
  Helper = FastlaneCore::Helper # you gotta love Ruby: Helper.* should use the Helper class contained in FastlaneCore
19
+ UI = FastlaneCore::UI
19
20
  end
20
21
 
21
22
  # rubocop:disable all
@@ -2,7 +2,7 @@ module Frameit
2
2
  class ConfigParser
3
3
  def load(path)
4
4
  return nil unless File.exist?(path) # we are okay with no config at all
5
- Helper.log.info "Parsing config file '#{path}'".yellow if $verbose
5
+ UI.message "Parsing config file '#{path}'" if $verbose
6
6
  @path = path
7
7
  self.parse(File.read(path))
8
8
  end
@@ -12,8 +12,8 @@ module Frameit
12
12
  begin
13
13
  @data = JSON.parse(data)
14
14
  rescue => ex
15
- Helper.log.fatal ex
16
- raise "Invalid JSON file at path '#{@path}'. Make sure it's a valid JSON file".red
15
+ UI.error ex.message
16
+ UI.user_error! "Invalid JSON file at path '#{@path}'. Make sure it's a valid JSON file"
17
17
  end
18
18
 
19
19
  self
@@ -63,29 +63,29 @@ module Frameit
63
63
  validate_values(value) # recursive call
64
64
  else
65
65
  if key == 'font'
66
- raise "Could not find font at path '#{File.expand_path(value)}'" unless File.exist? value
66
+ UI.user_error! "Could not find font at path '#{File.expand_path(value)}'" unless File.exist? value
67
67
  end
68
68
 
69
69
  if key == 'fonts'
70
- raise "`fonts` must be an array" unless value.kind_of? Array
70
+ UI.user_error! "`fonts` must be an array" unless value.kind_of? Array
71
71
 
72
72
  value.each do |current|
73
- raise "You must specify a font path" if current.fetch('font', '').length == 0
74
- raise "Could not find font at path '#{File.expand_path(current.fetch('font'))}'" unless File.exist? current.fetch('font')
75
- raise "`supported` must be an array" unless current.fetch('supported', []).kind_of? Array
73
+ UI.user_error! "You must specify a font path" if current.fetch('font', '').length == 0
74
+ UI.user_error! "Could not find font at path '#{File.expand_path(current.fetch('font'))}'" unless File.exist? current.fetch('font')
75
+ UI.user_error! "`supported` must be an array" unless current.fetch('supported', []).kind_of? Array
76
76
  end
77
77
  end
78
78
 
79
79
  if key == 'background'
80
- raise "Could not find background image at path '#{File.expand_path(value)}'" unless File.exist? value
80
+ UI.user_error! "Could not find background image at path '#{File.expand_path(value)}'" unless File.exist? value
81
81
  end
82
82
 
83
83
  if key == 'color'
84
- raise "Invalid color '#{value}'. Must be valid Hex #123123" unless value.include? "#"
84
+ UI.user_error! "Invalid color '#{value}'. Must be valid Hex #123123" unless value.include? "#"
85
85
  end
86
86
 
87
87
  if key == 'padding'
88
- raise "padding must be type integer or pair of integers of format 'AxB'" unless value.kind_of?(Integer) || value.split('x').length == 2
88
+ UI.user_error! "padding must be type integer or pair of integers of format 'AxB'" unless value.kind_of?(Integer) || value.split('x').length == 2
89
89
  end
90
90
  end
91
91
  end
@@ -8,12 +8,12 @@ module Frameit
8
8
 
9
9
  def self.check_image_magick
10
10
  unless `which convert`.include? "convert"
11
- Helper.log.fatal '#############################################################'
12
- Helper.log.fatal "# You have to install the ImageMagick to use FrameIt"
13
- Helper.log.fatal "# Install it using 'brew update && brew install imagemagick'"
14
- Helper.log.fatal "# If you don't have homebrew: http://brew.sh"
15
- Helper.log.fatal '#############################################################'
16
- raise "Install ImageMagick and start frameit again!"
11
+ UI.error '#############################################################'
12
+ UI.error "# You have to install the ImageMagick to use FrameIt"
13
+ UI.error "# Install it using 'brew update && brew install imagemagick'"
14
+ UI.error "# If you don't have homebrew: http://brew.sh"
15
+ UI.error '#############################################################'
16
+ UI.user_error! "Install ImageMagick and start frameit again!"
17
17
  end
18
18
  end
19
19
  end
@@ -39,7 +39,7 @@ module Frameit
39
39
  output_path = screenshot.path.gsub('.png', '_framed.png').gsub('.PNG', '_framed.png')
40
40
  image.format "png"
41
41
  image.write output_path
42
- Helper.log.info "Added frame: '#{File.expand_path(output_path)}'".green
42
+ UI.success "Added frame: '#{File.expand_path(output_path)}'"
43
43
  end
44
44
 
45
45
  # puts the screenshot into the frame
@@ -58,7 +58,7 @@ module Frameit
58
58
  if @offset_information and (@offset_information['offset'] or @offset_information['offset'])
59
59
  return @offset_information
60
60
  end
61
- raise "Could not find offset_information for '#{screenshot}'"
61
+ UI.user_error! "Could not find offset_information for '#{screenshot}'"
62
62
  end
63
63
 
64
64
  #########################################################################################
@@ -179,7 +179,7 @@ module Frameit
179
179
  # too large - resizing now
180
180
  smaller = (1.0 / ratio)
181
181
 
182
- Helper.log.debug "Text for image #{self.screenshot.path} is quite long, reducing font size by #{(ratio - 1.0).round(2)}" if $verbose
182
+ UI.message "Text for image #{self.screenshot.path} is quite long, reducing font size by #{(ratio - 1.0).round(2)}" if $verbose
183
183
 
184
184
  title.resize "#{(smaller * title.width).round}x"
185
185
  keyword.resize "#{(smaller * keyword.width).round}x" if keyword
@@ -235,8 +235,8 @@ module Frameit
235
235
 
236
236
  current_font = font(key)
237
237
  text = fetch_text(key)
238
- Helper.log.debug "Using #{current_font} as font the #{key} of #{screenshot.path}" if $verbose and current_font
239
- Helper.log.debug "Adding text '#{text}'" if $verbose
238
+ UI.message "Using #{current_font} as font the #{key} of #{screenshot.path}" if $verbose and current_font
239
+ UI.message "Adding text '#{text}'" if $verbose
240
240
 
241
241
  text.gsub! '\n', "\n"
242
242
 
@@ -269,7 +269,7 @@ module Frameit
269
269
 
270
270
  # Fetches the title + keyword for this particular screenshot
271
271
  def fetch_text(type)
272
- raise "Valid parameters :keyword, :title" unless [:keyword, :title].include? type
272
+ UI.user_error! "Valid parameters :keyword, :title" unless [:keyword, :title].include? type
273
273
 
274
274
  # Try to get it from a keyword.strings or title.strings file
275
275
  strings_path = File.join(File.expand_path("..", screenshot.path), "#{type}.strings")
@@ -281,11 +281,11 @@ module Frameit
281
281
 
282
282
  # No string files, fallback to Framefile config
283
283
  result = fetch_config[type.to_s]['text'] if fetch_config[type.to_s]
284
- Helper.log.debug "Falling back to default text as there was nothing specified in the .strings file" if $verbose
284
+ UI.message "Falling back to default text as there was nothing specified in the .strings file" if $verbose
285
285
 
286
286
  if type == :title and !result
287
287
  # title is mandatory
288
- raise "Could not get title for screenshot #{screenshot.path}. Please provide one in your Framefile.json".red
288
+ UI.user_error! "Could not get title for screenshot #{screenshot.path}. Please provide one in your Framefile.json"
289
289
  end
290
290
 
291
291
  return result
@@ -307,13 +307,13 @@ module Frameit
307
307
  end
308
308
  else
309
309
  # No `supported` array, this will always be true
310
- Helper.log.debug "Found a font with no list of supported languages, using this now" if $verbose
310
+ UI.message "Found a font with no list of supported languages, using this now" if $verbose
311
311
  return font["font"]
312
312
  end
313
313
  end
314
314
  end
315
315
 
316
- Helper.log.debug "No custom font specified for #{screenshot}, using the default one" if $verbose
316
+ UI.message "No custom font specified for #{screenshot}, using the default one" if $verbose
317
317
  return nil
318
318
  end
319
319
  end
@@ -8,34 +8,34 @@ module Frameit
8
8
  end
9
9
 
10
10
  def setup_frames
11
- puts "----------------------------------------------------".green
12
- puts "Looks like you have no device templates installed".green
13
- puts "The images can not be pre-installed due to licensing".green
14
- puts "Press Enter to get started".green
15
- puts "----------------------------------------------------".green
11
+ UI.success "----------------------------------------------------"
12
+ UI.success "Looks like you have no device templates installed"
13
+ UI.success "The images can not be pre-installed due to licensing"
14
+ UI.success "Press Enter to get started"
15
+ UI.success "----------------------------------------------------"
16
16
  STDIN.gets
17
17
 
18
18
  system("open '#{DOWNLOAD_URL}'")
19
- puts "----------------------------------------------------".green
20
- puts "Download the zip files for the following devices".green
21
- puts "iPhone 6s, iPhone 6s Plus, iPhone 5s, iPad mini 4 and iPad Pro".green
22
- puts "You only need to download the devices you want to use".green
23
- puts "Press Enter when you downloaded the zip files".green
24
- puts "----------------------------------------------------".green
19
+ UI.success "----------------------------------------------------"
20
+ UI.success "Download the zip files for the following devices"
21
+ UI.success "iPhone 6s, iPhone 6s Plus, iPhone 5s, iPad mini 4 and iPad Pro"
22
+ UI.success "You only need to download the devices you want to use"
23
+ UI.success "Press Enter when you downloaded the zip files"
24
+ UI.success "----------------------------------------------------"
25
25
  STDIN.gets
26
26
 
27
27
  loop do
28
28
  system("mkdir -p '#{templates_path}' && open '#{templates_path}'")
29
- puts "----------------------------------------------------".green
30
- puts "Extract the downloaded files into the folder".green
31
- puts "'#{templates_path}', which should be open in your Finder".green
32
- puts "You can just copy the whole content into it.".green
33
- puts "Press Enter when you extracted the files into the given folder".green
34
- puts "----------------------------------------------------".green
29
+ UI.success "----------------------------------------------------"
30
+ UI.success "Extract the downloaded files into the folder"
31
+ UI.success "'#{templates_path}', which should be open in your Finder"
32
+ UI.success "You can just copy the whole content into it."
33
+ UI.success "Press Enter when you extracted the files into the given folder"
34
+ UI.success "----------------------------------------------------"
35
35
  STDIN.gets
36
36
 
37
37
  if !frames_exist?
38
- puts "Sorry, I can't find the PSD files. Make sure you unzipped them into '#{templates_path}'".red
38
+ UI.error "Sorry, I can't find the PSD files. Make sure you unzipped them into '#{templates_path}'"
39
39
  else
40
40
  break # everything is finished
41
41
  end
@@ -62,7 +62,7 @@ module Frameit
62
62
  resulting_path = psd.gsub('.psd', '.png')
63
63
  next if File.exist?(resulting_path)
64
64
 
65
- Helper.log.debug "Converting PSD file '#{psd}'".yellow
65
+ UI.important "Converting PSD file '#{psd}'"
66
66
  image = MiniMagick::Image.open(psd)
67
67
  if image
68
68
  image.format 'png'
@@ -70,7 +70,7 @@ module Frameit
70
70
 
71
71
  image.write(resulting_path)
72
72
  else
73
- Helper.log.error "Could not parse PSD file at path '#{psd}'"
73
+ UI.error "Could not parse PSD file at path '#{psd}'"
74
74
  end
75
75
  end
76
76
  end
@@ -28,12 +28,12 @@ module Frameit
28
28
  screenshot = Screenshot.new(full_path, color)
29
29
  screenshot.frame!
30
30
  rescue => ex
31
- Helper.log.error ex
32
- Helper.log.error "Backtrace:\n\t#{ex.backtrace.join("\n\t")}" if $verbose
31
+ UI.error ex.to_s
32
+ UI.error "Backtrace:\n\t#{ex.backtrace.join("\n\t")}" if $verbose
33
33
  end
34
34
  end
35
35
  else
36
- Helper.log.error "Could not find screenshots"
36
+ UI.error "Could not find screenshots"
37
37
  end
38
38
  end
39
39
  end
@@ -9,7 +9,7 @@ module Frameit
9
9
  # path: Path to screenshot
10
10
  # color: Color to use for the frame
11
11
  def initialize(path, color)
12
- raise "Couldn't find file at path '#{path}'".red unless File.exist? path
12
+ UI.user_error "Couldn't find file at path '#{path}'" unless File.exist? path
13
13
  @color = color
14
14
  @path = path
15
15
  @size = FastImage.size(path)
@@ -36,7 +36,7 @@ module Frameit
36
36
  when sizes::MAC
37
37
  return 'Mac'
38
38
  else
39
- Helper.log.error "Unknown device type for size #{@screen_size} for path '#{path}'"
39
+ UI.error "Unknown device type for size #{@screen_size} for path '#{path}'"
40
40
  end
41
41
  end
42
42
 
@@ -2,15 +2,15 @@ module Frameit
2
2
  # This class will parse the .string files
3
3
  class StringsParser
4
4
  def self.parse(path)
5
- raise "Couldn't find strings file at path '#{path}'".red unless File.exist? path
6
- raise "Must be .strings file, only got '#{path}'".red unless path.end_with? ".strings"
5
+ UI.user_error! "Couldn't find strings file at path '#{path}'" unless File.exist? path
6
+ UI.user_error! "Must be .strings file, only got '#{path}'" unless path.end_with? ".strings"
7
7
 
8
8
  result = {}
9
9
 
10
10
  # A .strings file is UTF-16 encoded. We only want to deal with UTF-8
11
11
  content = `iconv -f UTF-16 -t UTF-8 '#{path}'`
12
12
 
13
- content.split("\n").each do |line|
13
+ content.split("\n").each_with_index do |line, index|
14
14
  begin
15
15
  # We don't care about comments and empty lines
16
16
  if line.start_with? '"'
@@ -20,8 +20,8 @@ module Frameit
20
20
  result[key] = value
21
21
  end
22
22
  rescue => ex
23
- Helper.log.error ex
24
- Helper.log.error line
23
+ UI.error "Error parsing #{path} line #{index + 1}: '#{line}'"
24
+ UI.verbose "#{ex.message}\n#{ex.backtrace.join('\n')}"
25
25
  end
26
26
  end
27
27
 
@@ -26,13 +26,13 @@ module Frameit
26
26
 
27
27
  if templates.count == 0
28
28
  if screenshot.screen_size == Deliver::AppScreenshot::ScreenSize::IOS_35
29
- Helper.log.warn "Unfortunately 3.5\" device frames were discontinued. Skipping screen '#{screenshot.path}'".yellow
30
- Helper.log.debug "Looked for: '#{parts.join(joiner)}.png'".red
29
+ UI.important "Unfortunately 3.5\" device frames were discontinued. Skipping screen '#{screenshot.path}'"
30
+ UI.error "Looked for: '#{parts.join(joiner)}.png'"
31
31
  else
32
- Helper.log.error "Could not find a valid template for screenshot '#{screenshot.path}'".red
33
- Helper.log.error "You can download new templates from '#{FrameConverter::DOWNLOAD_URL}'"
34
- Helper.log.error "and store them in '#{templates_path}'"
35
- Helper.log.error "Missing file: '#{parts.join(joiner)}.png'".red
32
+ UI.error "Could not find a valid template for screenshot '#{screenshot.path}'"
33
+ UI.error "You can download new templates from '#{FrameConverter::DOWNLOAD_URL}'"
34
+ UI.error "and store them in '#{templates_path}'"
35
+ UI.error "Missing file: '#{parts.join(joiner)}.png'"
36
36
  end
37
37
  return nil
38
38
  else
@@ -1,3 +1,3 @@
1
1
  module Frameit
2
- VERSION = "2.4.1"
2
+ VERSION = "2.4.2"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: frameit
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.4.1
4
+ version: 2.4.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Felix Krause
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-12-15 00:00:00.000000000 Z
11
+ date: 2016-02-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: fastlane_core
@@ -16,7 +16,7 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 0.16.0
19
+ version: 0.36.1
20
20
  - - "<"
21
21
  - !ruby/object:Gem::Version
22
22
  version: 1.0.0
@@ -26,7 +26,7 @@ dependencies:
26
26
  requirements:
27
27
  - - ">="
28
28
  - !ruby/object:Gem::Version
29
- version: 0.16.0
29
+ version: 0.36.1
30
30
  - - "<"
31
31
  - !ruby/object:Gem::Version
32
32
  version: 1.0.0
@@ -190,14 +190,14 @@ dependencies:
190
190
  requirements:
191
191
  - - "~>"
192
192
  - !ruby/object:Gem::Version
193
- version: '0.34'
193
+ version: 0.35.1
194
194
  type: :development
195
195
  prerelease: false
196
196
  version_requirements: !ruby/object:Gem::Requirement
197
197
  requirements:
198
198
  - - "~>"
199
199
  - !ruby/object:Gem::Version
200
- version: '0.34'
200
+ version: 0.35.1
201
201
  description: Quickly put your screenshots into the right device frames
202
202
  email:
203
203
  - frameit@krausefx.com
@@ -243,7 +243,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
243
243
  version: '0'
244
244
  requirements: []
245
245
  rubyforge_project:
246
- rubygems_version: 2.4.0
246
+ rubygems_version: 2.4.6
247
247
  signing_key:
248
248
  specification_version: 4
249
249
  summary: Quickly put your screenshots into the right device frames