fastlane-plugin-framer 0.1.0 → 0.2.0

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: 9ac4706b2a926352904eaaae3091e02ebf3ff9f2
4
- data.tar.gz: 3746ed04028126a2fcbfb3a7be5e5128cba0f6cd
3
+ metadata.gz: ead286739a4dc5358d1ce3b78445e2be9d1b998b
4
+ data.tar.gz: 52b60581ce5c3dda8011a98b38e52aaa36395558
5
5
  SHA512:
6
- metadata.gz: 942ac782050e71f02d823755eb6b38f1618ec3f5ed57c2f54db139344a1c16287eea1596b2a81ca1b88b60de198972c63c210f278f72e97c6e3f29d298e15516
7
- data.tar.gz: f826dd182be3393bc537deb93b5cf40516c3dc1216be020ae46fc87f6ef996aa4f929cc61a284f47603bd1556d0cdf5c382e94370f106ffc3df1ed60a4f20331
6
+ metadata.gz: 0f04aabf6c588370a376dc7b9feb44cc8fb5d6209a63025a0958d5095893abb3b0146ed386c7c588ad6c03f6c889869287cc8eaa401192b957256226d443c8d0
7
+ data.tar.gz: 163a4fe66cd172c1b9d75b71789565eb952dbe943cb657c35ac5bec196f4935283c9abf77f891fd579b18c19611718410044c5b231777e3c348db63fba0ed70f
data/README.md CHANGED
@@ -12,18 +12,97 @@ fastlane add_plugin framer
12
12
 
13
13
  ## About framer
14
14
 
15
- Create images combining app screenshots to templates to make nice pictures to upload in App Store.
15
+ Create images combining app screenshots to templates to make nice pictures to upload in App Store or Google Play.
16
+
17
+ ![Flow](assets/example-flow.png)
16
18
 
17
19
  It gives you the freedom to customize the looks of each image (your designers will love that!) while keep their generation fully automated.
18
20
 
21
+ Template images can be anything. The only important thing is that it needs to be the same size as the screenshot it will contains.
22
+
23
+ You can specify the position and the size of the screen in the template and (optionally) the position and size of the text.
24
+
19
25
  ## Example
20
26
 
21
- Check out the [example `Fastfile`](fastlane/Fastfile) to see how to use this plugin. Try it by cloning the repo, running `fastlane install_plugins` and `bundle exec fastlane test`.
27
+ Check out the [example `Fastfile`](fastlane/Fastfile) to see how to use this plugin.
28
+
29
+ There are 2 lanes, one for a simple flow (`demo-1`) and another with more languages and screens (`demo-2`).
30
+
31
+ Try them by cloning the repo, running `fastlane install_plugins` and `bundle exec fastlane demo_1` or `bundle exec fastlane demo_2`.
32
+
33
+ ## Configuration
34
+
35
+ > From great customizations come great configurations [files]
36
+
37
+ In order to work, you need to configure each template and the text to draw in the final images.
38
+
39
+ ### Running parameters
40
+
41
+ The **framer** action support 4 optional parameters (default values are used).
42
+
43
+ | Option | Description | Default |
44
+ | ----------------- | -------- | ------------ |
45
+ | `source_folder` | path to the folder that contains raw screenshots and `text.json` file | `./fastlane/framer/screens` |
46
+ | `template_folder` | path to the folder that contains the templates images and configuration | `./fastlane/framer/templates` |
47
+ | `output_folder` | path to the folder that will contains the final images, framed. Used then by `deliver` | `./fastlane/screenshots` (default one for `deliver`) |
48
+ | `output_suffix` | filenam suffix for the framed images | `-framed` |
49
+
50
+ ### Template Configuration
51
+
52
+ In the template folder you choose, there must be a `Config.json` file (see [example](fastlane/demo-1/templates/Config.json)). In there you will found
53
+
54
+ - a default configuration for all templates
55
+ - a custom configuration for each template (if needed).
56
+
57
+ **default** is, as you guess, the default configuration for all templates (a fallback configuration, if you will).
58
+
59
+ After that, for each template image you have, you have to put a new map with the same filename as your template image.
60
+
61
+ There are keys for configuring screeshot and for the text.
62
+
63
+ ```
64
+ "iPhone6s": {
65
+ "image": {
66
+ "offset": "+148+172",
67
+ "width": 457
68
+ },
69
+ "text": {
70
+ "offset_y": 1123,
71
+ "height": 210,
72
+ "size": 48
73
+ }
74
+ }
75
+ ```
76
+
77
+ #### Image
78
+
79
+ | Key | Type | Description |
80
+ | -------------- | --------:| ------------:|
81
+ | `offset` | String | Pixel position in the format `+[X value]+[Y value]` |
82
+ | `width` | Number | space available, in pixel, for the screen |
83
+
84
+ #### Text
85
+
86
+ | Key | Type | Description |
87
+ | -------------- | --------:| ------------:|
88
+ | `offset_x` | Number | X position of the text block |
89
+ | `offset_y` | Number | Y position of the text block|
90
+ | `height` | Number | height of the text block |
91
+ | `size` | Number | font size |
92
+ | `font` | String | path of custom font file to use |
93
+ | `color` | String | color for the text in hex format (ex. `#545454`) |
94
+ | `padding` | Number | horizontal internal padding of the text block |
95
+
96
+ ### Screenshots Text
97
+
98
+ If you want some text in the final framed images, you need to create a `text.json` file and put it with the raw device screenshots. It makes sense to commit this file in your repository.
99
+
100
+ `text.json` is a simple map where *key* is the part of the screenshot filename (I suggest the same string you use with the `snapshot()` command on your UI tests.
101
+ The *value* can be any strings.
22
102
 
23
103
  ## Run tests for this plugin
24
104
 
25
105
  To run both the tests, and code style validation, run
26
-
27
106
  ```
28
107
  rake
29
108
  ```
@@ -29,7 +29,7 @@ module Fastlane
29
29
  UI.message "Processing #{file}"
30
30
 
31
31
  template = self.find_template(templates, file)
32
- text = self.find_text(file)
32
+ text = self.find_text(source_folder, file)
33
33
  output = self.find_output(source_folder, file, output_folder, params[:output_suffix])
34
34
 
35
35
  if template.nil?
@@ -65,7 +65,7 @@ module Fastlane
65
65
  # Detect available templates
66
66
  templates = []
67
67
 
68
- Dir.glob("#{template_folder}/*.png") do |file|
68
+ Dir.glob("#{template_folder}/**/*.png") do |file|
69
69
 
70
70
  name = File.basename(file, ".png")
71
71
  UI.message "Loading template #{name}"
@@ -116,9 +116,16 @@ module Fastlane
116
116
  return templates.find { |template| template.size == size }
117
117
  end
118
118
 
119
- def self.find_text(screenshot_file)
119
+ def self.find_text(source_dir, screenshot_file)
120
120
  directory = File.dirname(screenshot_file)
121
121
  strings_path = File.join(directory, "text.json")
122
+
123
+ while !File.exist?(strings_path) do
124
+ directory = File.dirname(directory)
125
+ break if directory == source_dir
126
+ strings_path = File.join(directory, "text.json")
127
+ end
128
+
122
129
  return nil unless File.exist?(strings_path)
123
130
 
124
131
  text = JSON.parse(File.read(strings_path))
@@ -145,7 +152,7 @@ module Fastlane
145
152
 
146
153
  # Ensure output dir exist
147
154
  folder = File.dirname(file_path)
148
- Dir.mkdir(folder) unless File.exist?(folder)
155
+ self.create_dir_if_not_exists(folder)
149
156
 
150
157
  return file_path
151
158
  end
@@ -222,6 +229,15 @@ module Fastlane
222
229
  template_img.destroy!
223
230
  end
224
231
 
232
+ def self.create_dir_if_not_exists(path)
233
+ recursive = path.split('/')
234
+ directory = ''
235
+ recursive.each do |sub_directory|
236
+ directory += sub_directory + '/'
237
+ Dir.mkdir(directory) unless (File.directory? directory)
238
+ end
239
+ end
240
+
225
241
  #####################################################
226
242
  # @!group Documentation
227
243
  #####################################################
@@ -1,5 +1,5 @@
1
1
  module Fastlane
2
2
  module Framer
3
- VERSION = "0.1.0"
3
+ VERSION = "0.2.0"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fastlane-plugin-framer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - DrAL3X
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-08-31 00:00:00.000000000 Z
11
+ date: 2017-03-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mini_magick
@@ -155,10 +155,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
155
155
  version: '0'
156
156
  requirements: []
157
157
  rubyforge_project:
158
- rubygems_version: 2.6.6
158
+ rubygems_version: 2.6.8
159
159
  signing_key:
160
160
  specification_version: 4
161
161
  summary: Create images combining app screenshots with templates to make nice pictures
162
162
  for the App Store
163
163
  test_files: []
164
- has_rdoc: