fastlane 2.106.0 → 2.106.1

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: 5c7e61559acf160fa5f016ea363d32ad348ad583
4
- data.tar.gz: 5ecf43f3ce74058e1b487db70d1d7a704ce601ef
3
+ metadata.gz: 20c1d9cdf81fb3028f468bc98f8c32e92a38ea62
4
+ data.tar.gz: 002c15aa8ff8bd52bc8a97c06da5134c84d7c015
5
5
  SHA512:
6
- metadata.gz: 6fa437b45269ee6e6f7a725779b745ea7b8dde2fc847331ab9e46d95c3f7e9072dcb299fd6148b026ec63c91002f06cec9d46026ffd790f44a54cead9aaf36d7
7
- data.tar.gz: 88b20d20d5034c3dbfaae9a0445693a9b756574cc4ef770236fff8f75fca6514c2c2d178d753eda21d235b020b3d38a10bdc1186558a6be58b3a8f705c8aa536
6
+ metadata.gz: f668abf3192ebaba514277dcfa6240aae7f07244d4aaee4f7ffe859357a6c24e00bdb87a3f94e0514b4b5673e9b98f67f0d584dffd5277309631a739e9d46776
7
+ data.tar.gz: 52f3763e76deb852ffb981218aef346d8290596244160c9486a375d2517d3189348ba9826a809d2b49669e868bef0098b277838cd3431aa1624bc7052bb3d5da
data/README.md CHANGED
@@ -33,43 +33,17 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
33
33
  <!-- This table is regenerated and resorted on each release -->
34
34
  <table id='team'>
35
35
  <tr>
36
- <td id='jérôme-lacoste'>
37
- <a href='https://github.com/lacostej'>
38
- <img src='https://github.com/lacostej.png?size=140'>
39
- </a>
40
- <h4 align='center'><a href='https://twitter.com/lacostej'>Jérôme Lacoste</a></h4>
41
- </td>
42
- <td id='aaron-brager'>
43
- <a href='https://github.com/getaaron'>
44
- <img src='https://github.com/getaaron.png?size=140'>
45
- </a>
46
- <h4 align='center'><a href='https://twitter.com/getaaron'>Aaron Brager</a></h4>
47
- </td>
48
- <td id='fumiya-nakamura'>
49
- <a href='https://github.com/nafu'>
50
- <img src='https://github.com/nafu.png?size=140'>
51
- </a>
52
- <h4 align='center'><a href='https://twitter.com/nafu003'>Fumiya Nakamura</a></h4>
53
- </td>
54
- <td id='stefan-natchev'>
55
- <a href='https://github.com/snatchev'>
56
- <img src='https://github.com/snatchev.png?size=140'>
57
- </a>
58
- <h4 align='center'><a href='https://twitter.com/snatchev'>Stefan Natchev</a></h4>
59
- </td>
60
- <td id='jorge-revuelta-h'>
61
- <a href='https://github.com/minuscorp'>
62
- <img src='https://github.com/minuscorp.png?size=140'>
36
+ <td id='danielle-tomlinson'>
37
+ <a href='https://github.com/DanToml'>
38
+ <img src='https://github.com/DanToml.png?size=140'>
63
39
  </a>
64
- <h4 align='center'><a href='https://twitter.com/minuscorp'>Jorge Revuelta H</a></h4>
40
+ <h4 align='center'><a href='https://twitter.com/DanToml'>Danielle Tomlinson</a></h4>
65
41
  </td>
66
- </tr>
67
- <tr>
68
- <td id='maksym-grebenets'>
69
- <a href='https://github.com/mgrebenets'>
70
- <img src='https://github.com/mgrebenets.png?size=140'>
42
+ <td id='felix-krause'>
43
+ <a href='https://github.com/KrauseFx'>
44
+ <img src='https://github.com/KrauseFx.png?size=140'>
71
45
  </a>
72
- <h4 align='center'><a href='https://twitter.com/mgrebenets'>Maksym Grebenets</a></h4>
46
+ <h4 align='center'><a href='https://twitter.com/KrauseFx'>Felix Krause</a></h4>
73
47
  </td>
74
48
  <td id='andrew-mcburney'>
75
49
  <a href='https://github.com/AndrewMcBurney'>
@@ -83,18 +57,44 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
83
57
  </a>
84
58
  <h4 align='center'><a href='https://twitter.com/mellis1995'>Matthew Ellis</a></h4>
85
59
  </td>
86
- <td id='luka-mirosevic'>
87
- <a href='https://github.com/lmirosevic'>
88
- <img src='https://github.com/lmirosevic.png?size=140'>
60
+ <td id='jimmy-dee'>
61
+ <a href='https://github.com/jdee'>
62
+ <img src='https://github.com/jdee.png?size=140'>
89
63
  </a>
90
- <h4 align='center'><a href='https://twitter.com/lmirosevic'>Luka Mirosevic</a></h4>
64
+ <h4 align='center'>Jimmy Dee</h4>
91
65
  </td>
66
+ </tr>
67
+ <tr>
92
68
  <td id='iulian-onofrei'>
93
69
  <a href='https://github.com/revolter'>
94
70
  <img src='https://github.com/revolter.png?size=140'>
95
71
  </a>
96
72
  <h4 align='center'><a href='https://twitter.com/Revolt666'>Iulian Onofrei</a></h4>
97
73
  </td>
74
+ <td id='aaron-brager'>
75
+ <a href='https://github.com/getaaron'>
76
+ <img src='https://github.com/getaaron.png?size=140'>
77
+ </a>
78
+ <h4 align='center'><a href='https://twitter.com/getaaron'>Aaron Brager</a></h4>
79
+ </td>
80
+ <td id='helmut-januschka'>
81
+ <a href='https://github.com/hjanuschka'>
82
+ <img src='https://github.com/hjanuschka.png?size=140'>
83
+ </a>
84
+ <h4 align='center'><a href='https://twitter.com/hjanuschka'>Helmut Januschka</a></h4>
85
+ </td>
86
+ <td id='jan-piotrowski'>
87
+ <a href='https://github.com/janpio'>
88
+ <img src='https://github.com/janpio.png?size=140'>
89
+ </a>
90
+ <h4 align='center'><a href='https://twitter.com/Sujan'>Jan Piotrowski</a></h4>
91
+ </td>
92
+ <td id='luka-mirosevic'>
93
+ <a href='https://github.com/lmirosevic'>
94
+ <img src='https://github.com/lmirosevic.png?size=140'>
95
+ </a>
96
+ <h4 align='center'><a href='https://twitter.com/lmirosevic'>Luka Mirosevic</a></h4>
97
+ </td>
98
98
  </tr>
99
99
  <tr>
100
100
  <td id='olivier-halligon'>
@@ -103,49 +103,49 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
103
103
  </a>
104
104
  <h4 align='center'><a href='https://twitter.com/aligatr'>Olivier Halligon</a></h4>
105
105
  </td>
106
+ <td id='maksym-grebenets'>
107
+ <a href='https://github.com/mgrebenets'>
108
+ <img src='https://github.com/mgrebenets.png?size=140'>
109
+ </a>
110
+ <h4 align='center'><a href='https://twitter.com/mgrebenets'>Maksym Grebenets</a></h4>
111
+ </td>
112
+ <td id='jorge-revuelta-h'>
113
+ <a href='https://github.com/minuscorp'>
114
+ <img src='https://github.com/minuscorp.png?size=140'>
115
+ </a>
116
+ <h4 align='center'><a href='https://twitter.com/minuscorp'>Jorge Revuelta H</a></h4>
117
+ </td>
106
118
  <td id='josh-holtz'>
107
119
  <a href='https://github.com/joshdholtz'>
108
120
  <img src='https://github.com/joshdholtz.png?size=140'>
109
121
  </a>
110
122
  <h4 align='center'><a href='https://twitter.com/joshdholtz'>Josh Holtz</a></h4>
111
123
  </td>
112
- <td id='jan-piotrowski'>
113
- <a href='https://github.com/janpio'>
114
- <img src='https://github.com/janpio.png?size=140'>
115
- </a>
116
- <h4 align='center'><a href='https://twitter.com/Sujan'>Jan Piotrowski</a></h4>
117
- </td>
118
124
  <td id='joshua-liebowitz'>
119
125
  <a href='https://github.com/taquitos'>
120
126
  <img src='https://github.com/taquitos.png?size=140'>
121
127
  </a>
122
128
  <h4 align='center'><a href='https://twitter.com/taquitos'>Joshua Liebowitz</a></h4>
123
129
  </td>
124
- <td id='felix-krause'>
125
- <a href='https://github.com/KrauseFx'>
126
- <img src='https://github.com/KrauseFx.png?size=140'>
127
- </a>
128
- <h4 align='center'><a href='https://twitter.com/KrauseFx'>Felix Krause</a></h4>
129
- </td>
130
130
  </tr>
131
131
  <tr>
132
- <td id='helmut-januschka'>
133
- <a href='https://github.com/hjanuschka'>
134
- <img src='https://github.com/hjanuschka.png?size=140'>
132
+ <td id='jérôme-lacoste'>
133
+ <a href='https://github.com/lacostej'>
134
+ <img src='https://github.com/lacostej.png?size=140'>
135
135
  </a>
136
- <h4 align='center'><a href='https://twitter.com/hjanuschka'>Helmut Januschka</a></h4>
136
+ <h4 align='center'><a href='https://twitter.com/lacostej'>Jérôme Lacoste</a></h4>
137
137
  </td>
138
- <td id='danielle-tomlinson'>
139
- <a href='https://github.com/DanToml'>
140
- <img src='https://github.com/DanToml.png?size=140'>
138
+ <td id='stefan-natchev'>
139
+ <a href='https://github.com/snatchev'>
140
+ <img src='https://github.com/snatchev.png?size=140'>
141
141
  </a>
142
- <h4 align='center'><a href='https://twitter.com/DanToml'>Danielle Tomlinson</a></h4>
142
+ <h4 align='center'><a href='https://twitter.com/snatchev'>Stefan Natchev</a></h4>
143
143
  </td>
144
- <td id='jimmy-dee'>
145
- <a href='https://github.com/jdee'>
146
- <img src='https://github.com/jdee.png?size=140'>
144
+ <td id='fumiya-nakamura'>
145
+ <a href='https://github.com/nafu'>
146
+ <img src='https://github.com/nafu.png?size=140'>
147
147
  </a>
148
- <h4 align='center'>Jimmy Dee</h4>
148
+ <h4 align='center'><a href='https://twitter.com/nafu003'>Fumiya Nakamura</a></h4>
149
149
  </td>
150
150
  <td id='kohki-miki'>
151
151
  <a href='https://github.com/giginet'>
@@ -9,26 +9,6 @@ def self.windows?
9
9
  (/cygwin|mswin|mingw|bccwin|wince|emx/ =~ RUBY_PLATFORM) != nil
10
10
  end
11
11
 
12
- if ENV["FASTLANE_OPTIMIZE_BOOT"]
13
- require 'bootsnap'
14
- require 'tmpdir'
15
- require 'fileutils'
16
- require_relative "../fastlane/lib/fastlane/version.rb"
17
- cache_dir = "#{Dir.tmpdir}/fastlane/bootsnap-cache/" + Fastlane::VERSION
18
- unless File.directory?(cache_dir)
19
- FileUtils.mkdir_p(cache_dir)
20
- end
21
- Bootsnap.setup(
22
- cache_dir: cache_dir, # Path to your cache
23
- development_mode: false, # Current working environment
24
- load_path_cache: true, # Optimize the LOAD_PATH with a cache
25
- autoload_paths_cache: false, # Not relevant for fastlane (Optimize ActiveSupport autoloads with cache)
26
- disable_trace: true, # (Alpha) Set `RubyVM::InstructionSequence.compile_option = { trace_instruction: false }`
27
- compile_cache_iseq: !self.windows?, # Compile Ruby code into ISeq cache, breaks coverage reporting.
28
- compile_cache_yaml: true # Compile YAML into a cache
29
- )
30
- end
31
-
32
12
  require "fastlane/cli_tools_distributor"
33
13
 
34
14
  if Fastlane::CLIToolsDistributor.running_version_command?
@@ -4,9 +4,9 @@ module Deliver
4
4
  class UploadAssets
5
5
  SUPPORTED_ICON_EXTENSIONS = [".png", ".jpg", ".jpeg"]
6
6
  def upload(options)
7
+ return unless options[:app_icon] || options[:apple_watch_app_icon]
7
8
  return if options[:edit_live]
8
9
  app = options[:app]
9
- app_modified = false
10
10
 
11
11
  v = app.edit_version(platform: options[:platform])
12
12
  UI.user_error!("Could not find a version to edit for app '#{app.name}'") unless v
@@ -14,16 +14,14 @@ module Deliver
14
14
  if options[:app_icon]
15
15
  UI.message("Uploading app icon...")
16
16
  v.upload_large_icon!(options[:app_icon])
17
- app_modified = true
18
17
  end
19
18
 
20
19
  if options[:apple_watch_app_icon]
21
20
  UI.message("Uploading apple watchapp icon...")
22
21
  v.upload_watch_icon!(options[:apple_watch_app_icon])
23
- app_modified = true
24
22
  end
25
23
 
26
- v.save! if app_modified
24
+ v.save!
27
25
  end
28
26
  end
29
27
  end
@@ -137,7 +137,7 @@ These are defined in the `data` key. This is an array with the following keys fo
137
137
 
138
138
  | Key | Description |
139
139
  |-----|-------------|
140
- | `filter` | This is mandatory to link the individual configuration to the screenshot, based on part of the file name. <p>Example:<br>If a screenshot is named `iPhone 8-Brainstorming.png` you can use value `Brainstorming` for `filter`. All other keys from that array element will only be applied on this specific screenshot. |
140
+ | `filter` | This is mandatory to link the individual configuration to the screenshot, based on part of the file name. <p>Example:<br>If a screenshot is named `iPhone 8-Brainstorming.png` you can use value `Brainstorming` for `filter`. If there are more than one `filter` matching an entry, they will all be applied in order (which means that the last one has the highest precedence). All other keys from that array element will only be applied on this specific screenshot. |
141
141
  | `keyword` | Similar use as in `default`, except that parameter `text` can be used here because it is screenshot specific. |
142
142
  | `title` | Similar use as in `default`, except that parameter `text` can be used here because it is screenshot specific. |
143
143
 
@@ -1,5 +1,5 @@
1
1
  module Fastlane
2
- VERSION = '2.106.0'.freeze
2
+ VERSION = '2.106.1'.freeze
3
3
  DESCRIPTION = "The easiest way to automate beta deployments and releases for your iOS and Android apps".freeze
4
4
  MINIMUM_XCODE_RELEASE = "7.0".freeze
5
5
  RUBOCOP_REQUIREMENT = '0.49.1'.freeze
@@ -18,4 +18,4 @@ class Deliverfile: DeliverfileProtocol {
18
18
 
19
19
 
20
20
 
21
- // Generated with fastlane 2.106.0
21
+ // Generated with fastlane 2.106.1
@@ -4001,7 +4001,7 @@ func xcov(workspace: String? = nil,
4001
4001
  coverallsServiceJobId: String? = nil,
4002
4002
  coverallsRepoToken: String? = nil,
4003
4003
  xcconfig: String? = nil,
4004
- ideFoundationPath: String = "/Applications/Xcode.app/Contents/Developer/../Frameworks/IDEFoundation.framework/Versions/A/IDEFoundation",
4004
+ ideFoundationPath: String = "/Applications/Xcode-10.app/Contents/Developer/../Frameworks/IDEFoundation.framework/Versions/A/IDEFoundation",
4005
4005
  legacySupport: Bool = false) {
4006
4006
  let command = RubyCommand(commandID: "", methodName: "xcov", className: nil, args: [RubyCommand.Argument(name: "workspace", value: workspace),
4007
4007
  RubyCommand.Argument(name: "project", value: project),
@@ -4109,4 +4109,4 @@ let screengrabfile: Screengrabfile = Screengrabfile()
4109
4109
  let snapshotfile: Snapshotfile = Snapshotfile()
4110
4110
  // Please don't remove the lines below
4111
4111
  // They are used to detect outdated files
4112
- // FastlaneRunnerAPIVersion [0.9.30]
4112
+ // FastlaneRunnerAPIVersion [0.9.31]
@@ -18,4 +18,4 @@ class Gymfile: GymfileProtocol {
18
18
 
19
19
 
20
20
 
21
- // Generated with fastlane 2.106.0
21
+ // Generated with fastlane 2.106.1
@@ -18,4 +18,4 @@ class Matchfile: MatchfileProtocol {
18
18
 
19
19
 
20
20
 
21
- // Generated with fastlane 2.106.0
21
+ // Generated with fastlane 2.106.1
@@ -18,4 +18,4 @@ class Precheckfile: PrecheckfileProtocol {
18
18
 
19
19
 
20
20
 
21
- // Generated with fastlane 2.106.0
21
+ // Generated with fastlane 2.106.1
@@ -18,4 +18,4 @@ class Scanfile: ScanfileProtocol {
18
18
 
19
19
 
20
20
 
21
- // Generated with fastlane 2.106.0
21
+ // Generated with fastlane 2.106.1
@@ -18,4 +18,4 @@ class Screengrabfile: ScreengrabfileProtocol {
18
18
 
19
19
 
20
20
 
21
- // Generated with fastlane 2.106.0
21
+ // Generated with fastlane 2.106.1
@@ -18,4 +18,4 @@ class Snapshotfile: SnapshotfileProtocol {
18
18
 
19
19
 
20
20
 
21
- // Generated with fastlane 2.106.0
21
+ // Generated with fastlane 2.106.1
@@ -98,8 +98,8 @@ module FastlaneCore
98
98
 
99
99
  instruments_devices_output.split(/\n/).each do |instruments_device|
100
100
  device_uuids.each do |device_uuid|
101
- match = instruments_device.match(/(.+) \(([0-9.]+)\) \[([0-9a-f]+)\]?/)
102
- if match && match[3] == device_uuid
101
+ match = instruments_device.match(/(.+) \(([0-9.]+)\) \[(\h{40}|\h{8}-\h{16})\]?/)
102
+ if match && match[3].delete("-") == device_uuid
103
103
  devices << Device.new(name: match[1], udid: match[3], os_type: requested_os_type, os_version: match[2], state: "Booted", is_simulator: false)
104
104
  UI.verbose("USB Device Found - \"" + match[1] + "\" (" + match[2] + ") UUID:" + match[3])
105
105
  end
@@ -118,10 +118,11 @@ module FastlaneCore
118
118
  end
119
119
 
120
120
  is_supported_device = device_types.any? { |device_type| usb_item['_name'] == device_type }
121
- has_serial_number = (usb_item['serial_num'] || '').length == 40
121
+ serial_num = usb_item['serial_num'] || ''
122
+ has_serial_number = serial_num.length == 40 || serial_num.length == 24
122
123
 
123
124
  if is_supported_device && has_serial_number
124
- discovered_device_udids << usb_item['serial_num']
125
+ discovered_device_udids << serial_num
125
126
  end
126
127
  end
127
128
 
@@ -26,11 +26,14 @@ module Frameit
26
26
  # Fetches the finished configuration for a given path. This will try to look for a specific value
27
27
  # and fallback to a default value if nothing was found
28
28
  def fetch_value(path)
29
- specific = @data['data'].find { |a| path.include?(a['filter']) }
29
+ specifics = @data['data'].select { |a| path.include?(a['filter']) }
30
30
 
31
31
  default = @data['default']
32
32
 
33
- values = default.fastlane_deep_merge(specific || {})
33
+ values = default.clone
34
+ specifics.each do |specific|
35
+ values = values.fastlane_deep_merge(specific)
36
+ end
34
37
 
35
38
  change_paths_to_absolutes!(values)
36
39
  validate_values(values)
@@ -82,8 +85,12 @@ module Frameit
82
85
  when 'color'
83
86
  UI.user_error!("Invalid color '#{value}'. Must be valid Hex #123123") unless value.include?("#")
84
87
  when 'padding'
85
- unless value.kind_of?(Integer) || value.split('x').length == 2 || (value.end_with?('%') && value.to_f > 0)
86
- UI.user_error!("padding must be type integer or pair of integers of format 'AxB' or a percentage of screen size")
88
+ unless integer_or_percentage(value) || value.split('x').length == 2
89
+ UI.user_error!("padding must be an integer, or pair of integers of format 'AxB', or a percentage of screen size")
90
+ end
91
+ when 'title_min_height'
92
+ unless integer_or_percentage(value)
93
+ UI.user_error!("padding must be an integer, or a percentage of screen size")
87
94
  end
88
95
  when 'show_complete_frame', 'title_below_image'
89
96
  UI.user_error!("'#{key}' must be a Boolean") unless [true, false].include?(value)
@@ -93,5 +100,9 @@ module Frameit
93
100
  end
94
101
  end
95
102
  end
103
+
104
+ def integer_or_percentage(value)
105
+ value.kind_of?(Integer) || (value.end_with?('%') && value.to_f > 0)
106
+ end
96
107
  end
97
108
  end
@@ -132,7 +132,7 @@ module Frameit
132
132
 
133
133
  # Decrease the size of the framed screenshot to fit into the defined padding + background
134
134
  frame_width = background.width - horizontal_frame_padding * 2
135
- frame_height = background.height - space_to_device - vertical_frame_padding
135
+ frame_height = background.height - effective_text_height - vertical_frame_padding
136
136
 
137
137
  if fetch_config['show_complete_frame']
138
138
  # calculate the final size of the screenshot to resize in one go
@@ -172,6 +172,17 @@ module Frameit
172
172
  return scale_padding(padding)
173
173
  end
174
174
 
175
+ # Minimum height for the title
176
+ def title_min_height
177
+ @title_min_height ||= begin
178
+ height = fetch_config['title_min_height'] || 0
179
+ if height.kind_of?(String) && height.end_with?('%')
180
+ height = ([image.width, image.height].min * height.to_f * 0.01).ceil
181
+ end
182
+ height
183
+ end
184
+ end
185
+
175
186
  def scale_padding(padding)
176
187
  if padding.kind_of?(String) && padding.end_with?('%')
177
188
  padding = ([image.width, image.height].min * padding.to_f * 0.01).ceil
@@ -181,6 +192,24 @@ module Frameit
181
192
  return padding * multi
182
193
  end
183
194
 
195
+ def effective_text_height
196
+ [space_to_device, title_min_height].max
197
+ end
198
+
199
+ def device_top(background)
200
+ @device_top ||= begin
201
+ if title_below_image
202
+ background.height - effective_text_height - image.height
203
+ else
204
+ effective_text_height
205
+ end
206
+ end
207
+ end
208
+
209
+ def title_below_image
210
+ @title_below_image ||= fetch_config['title_below_image']
211
+ end
212
+
184
213
  # Returns a correctly sized background image
185
214
  def generate_background
186
215
  background = MiniMagick::Image.open(fetch_config['background'])
@@ -194,17 +223,10 @@ module Frameit
194
223
 
195
224
  def put_device_into_background(background)
196
225
  left_space = (background.width / 2.0 - image.width / 2.0).round
197
- title_below_image = fetch_config['title_below_image']
198
226
 
199
227
  @image = background.composite(image, "png") do |c|
200
228
  c.compose("Over")
201
- if title_below_image
202
- show_complete_frame = fetch_config['show_complete_frame']
203
- c.geometry("+#{left_space}+#{background.height - image.height - space_to_device}") unless show_complete_frame
204
- c.geometry("+#{left_space}+#{vertical_frame_padding}") if show_complete_frame
205
- else
206
- c.geometry("+#{left_space}+#{space_to_device}")
207
- end
229
+ c.geometry("+#{left_space}+#{device_top(background)}")
208
230
  end
209
231
 
210
232
  return image
@@ -235,25 +257,28 @@ module Frameit
235
257
  resize_text(keyword)
236
258
 
237
259
  vertical_padding = vertical_frame_padding # assign padding to variable
238
- keyword_top_space = vertical_padding
239
260
  spacing_between_title_and_keyword = (actual_font_size / 2)
240
- title_top_space = vertical_padding + keyword.height + spacing_between_title_and_keyword
241
261
  title_left_space = (background.width / 2.0 - title.width / 2.0).round
242
262
  keyword_left_space = (background.width / 2.0 - keyword.width / 2.0).round
243
263
 
244
264
  self.space_to_device += title.height + keyword.height + spacing_between_title_and_keyword + vertical_padding
245
- title_below_image = fetch_config['title_below_image']
265
+
266
+ if title_below_image
267
+ keyword_top = background.height - effective_text_height / 2 - (keyword.height + spacing_between_title_and_keyword + title.height) / 2
268
+ else
269
+ keyword_top = device_top(background) / 2 - spacing_between_title_and_keyword / 2 - keyword.height
270
+ end
271
+ title_top = keyword_top + keyword.height + spacing_between_title_and_keyword
272
+
246
273
  # keyword
247
274
  background = background.composite(keyword, "png") do |c|
248
275
  c.compose("Over")
249
- c.geometry("+#{keyword_left_space}+#{keyword_top_space}") unless title_below_image
250
- c.geometry("+#{keyword_left_space}+#{background.height - space_to_device + keyword_top_space}") if title_below_image
276
+ c.geometry("+#{keyword_left_space}+#{keyword_top}")
251
277
  end
252
278
  # Place the title below the keyword
253
279
  background = background.composite(title, "png") do |c|
254
280
  c.compose("Over")
255
- c.geometry("+#{title_left_space}+#{title_top_space}") unless title_below_image
256
- c.geometry("+#{title_left_space}+#{background.height - space_to_device + title_top_space}") if title_below_image
281
+ c.geometry("+#{title_left_space}+#{title_top}")
257
282
  end
258
283
  background
259
284
  end
@@ -291,17 +316,21 @@ module Frameit
291
316
  end
292
317
 
293
318
  vertical_padding = vertical_frame_padding # assign padding to variable
294
- top_space = vertical_padding + (actual_font_size - title.height) / 2
295
319
  left_space = (background.width / 2.0 - sum_width / 2.0).round
296
320
 
297
321
  self.space_to_device += actual_font_size + vertical_padding
298
322
 
323
+ if title_below_image
324
+ title_top = background.height - effective_text_height / 2 - title.height / 2
325
+ else
326
+ title_top = device_top(background) / 2 - title.height / 2
327
+ end
328
+
299
329
  # First, put the keyword on top of the screenshot, if we have one
300
330
  if keyword
301
331
  background = background.composite(keyword, "png") do |c|
302
332
  c.compose("Over")
303
- c.geometry("+#{left_space}+#{top_space}") unless title_below_image
304
- c.geometry("+#{left_space}+#{background.height - space_to_device + top_space}") if title_below_image
333
+ c.geometry("+#{left_space}+#{title_top}")
305
334
  end
306
335
 
307
336
  left_space += keyword.width + (keyword_padding * image_scale_factor)
@@ -310,8 +339,7 @@ module Frameit
310
339
  # Then, put the title on top of the screenshot next to the keyword
311
340
  background = background.composite(title, "png") do |c|
312
341
  c.compose("Over")
313
- c.geometry("+#{left_space}+#{top_space}") unless title_below_image
314
- c.geometry("+#{left_space}+#{background.height - space_to_device + top_space}") if title_below_image
342
+ c.geometry("+#{left_space}+#{title_top}")
315
343
  end
316
344
  background
317
345
  end
@@ -841,7 +841,7 @@ function resign {
841
841
  rm -f "$APP_ENTITLEMENTS"
842
842
  rm -f "$PATCHED_ENTITLEMENTS"
843
843
  rm -f "$PATCHED_ENTITLEMENTS.bak"
844
- rm -r "$TEMP_DIR/old-embedded-profile.plist"
844
+ rm -f "$TEMP_DIR/old-embedded-profile.plist"
845
845
  rm -f "$TEMP_DIR/profile.plist"
846
846
  rm -f "$TEMP_DIR/old-embedded.mobileprovision"
847
847
  rm -f "$TEMP_DIR/oldInfo.plist"
metadata CHANGED
@@ -1,33 +1,33 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fastlane
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.106.0
4
+ version: 2.106.1
5
5
  platform: ruby
6
6
  authors:
7
- - Manu Wallner
8
- - Olivier Halligon
9
- - Felix Krause
10
- - Danielle Tomlinson
11
- - Fumiya Nakamura
7
+ - Jimmy Dee
8
+ - Helmut Januschka
9
+ - Andrew McBurney
12
10
  - Maksym Grebenets
13
- - Luka Mirosevic
14
- - Iulian Onofrei
15
- - Jérôme Lacoste
16
- - Kohki Miki
17
- - Jorge Revuelta H
18
11
  - Stefan Natchev
19
- - Helmut Januschka
12
+ - Matthew Ellis
13
+ - Fumiya Nakamura
20
14
  - Aaron Brager
21
- - Andrew McBurney
22
- - Jimmy Dee
15
+ - Jérôme Lacoste
16
+ - Felix Krause
17
+ - Luka Mirosevic
23
18
  - Josh Holtz
19
+ - Danielle Tomlinson
20
+ - Manu Wallner
21
+ - Iulian Onofrei
24
22
  - Joshua Liebowitz
23
+ - Jorge Revuelta H
25
24
  - Jan Piotrowski
26
- - Matthew Ellis
25
+ - Kohki Miki
26
+ - Olivier Halligon
27
27
  autorequire:
28
28
  bindir: bin
29
29
  cert_chain: []
30
- date: 2018-10-10 00:00:00.000000000 Z
30
+ date: 2018-10-12 00:00:00.000000000 Z
31
31
  dependencies:
32
32
  - !ruby/object:Gem::Dependency
33
33
  name: slack-notifier
@@ -633,26 +633,6 @@ dependencies:
633
633
  - - "~>"
634
634
  - !ruby/object:Gem::Version
635
635
  version: '0.1'
636
- - !ruby/object:Gem::Dependency
637
- name: bootsnap
638
- requirement: !ruby/object:Gem::Requirement
639
- requirements:
640
- - - ">="
641
- - !ruby/object:Gem::Version
642
- version: 1.3.1
643
- - - "<"
644
- - !ruby/object:Gem::Version
645
- version: 1.4.0
646
- type: :runtime
647
- prerelease: false
648
- version_requirements: !ruby/object:Gem::Requirement
649
- requirements:
650
- - - ">="
651
- - !ruby/object:Gem::Version
652
- version: 1.3.1
653
- - - "<"
654
- - !ruby/object:Gem::Version
655
- version: 1.4.0
656
636
  - !ruby/object:Gem::Dependency
657
637
  name: rake
658
638
  requirement: !ruby/object:Gem::Requirement