fastlane-plugin-appicon 0.15.0 → 0.16.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +27 -3
- data/lib/fastlane/plugin/appicon/actions/android_appicon_action.rb +14 -2
- data/lib/fastlane/plugin/appicon/actions/appicon_action.rb +70 -5
- data/lib/fastlane/plugin/appicon/helper/appicon_helper.rb +20 -4
- data/lib/fastlane/plugin/appicon/version.rb +1 -1
- metadata +7 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 34a5a40f00f66babf8d35487344ed174c6413cb93a7436a4b2b1db448d1f139d
|
4
|
+
data.tar.gz: cbd32bd140fca377d4da0d05616234a51e9b4765fcb90b4d0f09c6b965dc4320
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6188bd3df216a12c1d075f47005362f47519f0214355b87af6bae097f232048aed91901dff69635120d7b010d042f5d368f31bd5f4be6c0dc01c59a248219095
|
7
|
+
data.tar.gz: 55a65329ca48a57857a0db29c9ea9967fa909e65f2cd4f69d95e47f7bf87cdeb6b1523756fe91cb0cb1b2a57bac6e8ed7d8b0eff7062f9eca64fd9d146f82ffa
|
data/README.md
CHANGED
@@ -12,11 +12,19 @@ This project is a [fastlane](https://github.com/fastlane/fastlane) plugin. To ge
|
|
12
12
|
fastlane add_plugin appicon
|
13
13
|
```
|
14
14
|
|
15
|
-
|
15
|
+
|
16
|
+
Please note that this plugin uses [minimagick](https://github.com/minimagick/minimagick), which requires either GraphicsMagick or ImageMagick library. If you have neither, you can install either via Homebrew:
|
17
|
+
|
16
18
|
|
17
19
|
```
|
18
20
|
brew install graphicsmagick
|
19
21
|
```
|
22
|
+
or
|
23
|
+
```
|
24
|
+
brew install imagemagick
|
25
|
+
```
|
26
|
+
|
27
|
+
The default CLI for the `mini_magick` gem is set to auto pick. It will first try to use `GraphicsMagick` (if you have it installed) otherwise it will use `ImageMagick`. If you want to be explicit about which CLI you use, set the `minimagick_cli` option to `graphicsmagick` or `imagemagick`. Not specifying this option will set `MiniMagick` to use auto which will choose what's available.
|
20
28
|
|
21
29
|
## About appicon
|
22
30
|
|
@@ -30,7 +38,9 @@ Check out the [example `Fastfile`](fastlane/Fastfile) to see how to use this plu
|
|
30
38
|
|
31
39
|
Just specify the source image using the `appicon_image_file`. Optionally specify the devices using `appicon_devices` and the destination path using `appicon_path`.
|
32
40
|
|
33
|
-
We recommend storing the full-size picture at `fastlane/metadata/app_icon.png` so it can be picked up by _deliver_, as well as this plugin
|
41
|
+
We recommend storing the full-size picture at `fastlane/metadata/app_icon.png` so it can be picked up by _deliver_, as well as this plugin.
|
42
|
+
|
43
|
+
If you want to use this plugin to generate a app icon for Messages(sticker) extension, set `messages_extension` to `true` and add `messages` to the `appicon_devices`.
|
34
44
|
|
35
45
|
```ruby
|
36
46
|
lane :basic do
|
@@ -59,6 +69,11 @@ lane :test3 do
|
|
59
69
|
)
|
60
70
|
end
|
61
71
|
|
72
|
+
lane :test4 do
|
73
|
+
appicon(appicon_image_file: 'spec/fixtures/Themoji.png',
|
74
|
+
appicon_devices: [:macos])
|
75
|
+
end
|
76
|
+
|
62
77
|
lane :splash_screen do
|
63
78
|
appicon(
|
64
79
|
appicon_image_file: 'spec/fixtures/splash_screen.png',
|
@@ -68,6 +83,15 @@ lane :splash_screen do
|
|
68
83
|
)
|
69
84
|
end
|
70
85
|
|
86
|
+
lane :messages_extension do
|
87
|
+
appicon(
|
88
|
+
appicon_image_file: "fastlane/metadata/iMessageAppIcon.png",
|
89
|
+
appicon_devices: [:iphone, :ipad, :ios_marketing, :messages],
|
90
|
+
appicon_path: 'iMessageStickers/Stickers.xcassets',
|
91
|
+
messages_extension: true
|
92
|
+
)
|
93
|
+
end
|
94
|
+
|
71
95
|
# or
|
72
96
|
|
73
97
|
lane :android do
|
@@ -115,7 +139,7 @@ If you have trouble using plugins, check out the [Plugins Troubleshooting](https
|
|
115
139
|
|
116
140
|
## Using `fastlane` Plugins
|
117
141
|
|
118
|
-
For more information about how the `fastlane` plugin system works, check out the [Plugins documentation](https://
|
142
|
+
For more information about how the `fastlane` plugin system works, check out the [Plugins documentation](https://docs.fastlane.tools/plugins/create-plugin/).
|
119
143
|
|
120
144
|
## About `fastlane`
|
121
145
|
|
@@ -42,6 +42,9 @@ module Fastlane
|
|
42
42
|
end
|
43
43
|
|
44
44
|
def self.run(params)
|
45
|
+
|
46
|
+
Helper::AppiconHelper.set_cli(params[:minimagick_cli])
|
47
|
+
|
45
48
|
fname = params[:appicon_image_file]
|
46
49
|
custom_sizes = params[:appicon_custom_sizes]
|
47
50
|
|
@@ -49,7 +52,7 @@ module Fastlane
|
|
49
52
|
icons.each do |icon|
|
50
53
|
image = MiniMagick::Image.open(fname)
|
51
54
|
|
52
|
-
Helper::AppiconHelper.check_input_image_size(image, 1024)
|
55
|
+
Helper::AppiconHelper.check_input_image_size(image, 1024, 1024)
|
53
56
|
|
54
57
|
# Custom icons will have basepath and filename already defined
|
55
58
|
if icon.has_key?('basepath') && icon.has_key?('filename')
|
@@ -169,7 +172,16 @@ module Fastlane
|
|
169
172
|
FastlaneCore::ConfigItem.new(key: :generate_rounded,
|
170
173
|
description: "Generate round icons?",
|
171
174
|
default_value: false,
|
172
|
-
type: Boolean)
|
175
|
+
type: Boolean),
|
176
|
+
FastlaneCore::ConfigItem.new(key: :minimagick_cli,
|
177
|
+
env_name: "APPICON_MINIMAGICK_CLI",
|
178
|
+
description: "Set MiniMagick CLI (auto picked by default). Values are: graphicsmagick, imagemagick",
|
179
|
+
optional: true,
|
180
|
+
type: String,
|
181
|
+
verify_block: proc do |value|
|
182
|
+
av = %w(graphicsmagick imagemagick)
|
183
|
+
UI.user_error!("Unsupported minimagick cli '#{value}', must be: #{av}") unless av.include?(value)
|
184
|
+
end)
|
173
185
|
]
|
174
186
|
end
|
175
187
|
|
@@ -38,6 +38,29 @@ module Fastlane
|
|
38
38
|
},
|
39
39
|
:watch_marketing => {
|
40
40
|
'1x' => ['1024x1024']
|
41
|
+
},
|
42
|
+
:macos => {
|
43
|
+
'1x' => ['16x16', '32x32', '128x128', '256x256', '512x512'],
|
44
|
+
'2x' => ['16x16', '32x32', '128x128', '256x256', '512x512'],
|
45
|
+
}
|
46
|
+
}
|
47
|
+
end
|
48
|
+
|
49
|
+
def self.needed_icons_messages_extension
|
50
|
+
{
|
51
|
+
iphone: {
|
52
|
+
'2x' => ['60x45'],
|
53
|
+
'3x' => ['60x45']
|
54
|
+
},
|
55
|
+
ipad: {
|
56
|
+
'2x' => ['67x50', '74x55']
|
57
|
+
},
|
58
|
+
messages: {
|
59
|
+
'2x' => ['27x20', '32x24'],
|
60
|
+
'3x' => ['27x20', '32x24']
|
61
|
+
},
|
62
|
+
ios_marketing: {
|
63
|
+
'1x' => ['1024x768']
|
41
64
|
}
|
42
65
|
}
|
43
66
|
end
|
@@ -45,11 +68,19 @@ module Fastlane
|
|
45
68
|
def self.run(params)
|
46
69
|
fname = params[:appicon_image_file]
|
47
70
|
basename = File.basename(fname, File.extname(fname))
|
48
|
-
basepath = Pathname.new(File.join(params[:appicon_path], params[:appicon_name]))
|
49
71
|
|
72
|
+
Helper::AppiconHelper.set_cli(params[:minimagick_cli])
|
73
|
+
|
74
|
+
is_messages_extension = params[:messages_extension]
|
75
|
+
basepath = Pathname.new(File.join(params[:appicon_path], is_messages_extension ? params[:appicon_messages_name] : params[:appicon_name]))
|
76
|
+
|
50
77
|
image = MiniMagick::Image.open(fname)
|
51
78
|
|
52
|
-
|
79
|
+
if is_messages_extension
|
80
|
+
Helper::AppiconHelper.check_input_image_size(image, 1024, 768)
|
81
|
+
else
|
82
|
+
Helper::AppiconHelper.check_input_image_size(image, 1024, 1024)
|
83
|
+
end
|
53
84
|
|
54
85
|
# Convert image to png
|
55
86
|
image.format 'png'
|
@@ -65,7 +96,7 @@ module Fastlane
|
|
65
96
|
|
66
97
|
images = []
|
67
98
|
|
68
|
-
icons = Helper::AppiconHelper.get_needed_icons(params[:appicon_devices], self.needed_icons, false)
|
99
|
+
icons = Helper::AppiconHelper.get_needed_icons(params[:appicon_devices], is_messages_extension ? self.needed_icons_messages_extension : self.needed_icons, false)
|
69
100
|
icons.each do |icon|
|
70
101
|
width = icon['width']
|
71
102
|
height = icon['height']
|
@@ -76,7 +107,8 @@ module Fastlane
|
|
76
107
|
filename += ".png"
|
77
108
|
|
78
109
|
# downsize icon
|
79
|
-
|
110
|
+
# "!" resizes to exact size (needed for messages extension)
|
111
|
+
image.resize "#{width}x#{height}!"
|
80
112
|
|
81
113
|
# Don't write change/created times into the PNG properties
|
82
114
|
# so unchanged files don't have different hashes.
|
@@ -90,6 +122,18 @@ module Fastlane
|
|
90
122
|
'scale' => icon['scale']
|
91
123
|
}
|
92
124
|
|
125
|
+
# if device is messages, we need to set it to universal
|
126
|
+
if icon['device'] == 'messages'
|
127
|
+
info['idiom'] = 'universal'
|
128
|
+
info['platform'] = 'ios'
|
129
|
+
end
|
130
|
+
|
131
|
+
# if device is ios_marketing but we are generating messages extension app, set the idiom correctly
|
132
|
+
if icon['device'] == 'ios_marketing' && is_messages_extension
|
133
|
+
info['platform'] = 'ios'
|
134
|
+
end
|
135
|
+
|
136
|
+
|
93
137
|
unless icon['device'] == 'universal'
|
94
138
|
info['size'] = icon['size']
|
95
139
|
end
|
@@ -146,12 +190,33 @@ module Fastlane
|
|
146
190
|
description: "Name of the appiconset inside the asset catalogue",
|
147
191
|
optional: true,
|
148
192
|
type: String),
|
193
|
+
FastlaneCore::ConfigItem.new(key: :appicon_messages_name,
|
194
|
+
env_name: "APPICON_MESSAGES_NAME",
|
195
|
+
default_value: 'AppIcon.stickersiconset',
|
196
|
+
description: "Name of the appiconset inside the asset catalogue",
|
197
|
+
optional: true,
|
198
|
+
type: String),
|
149
199
|
FastlaneCore::ConfigItem.new(key: :remove_alpha,
|
150
200
|
env_name: "REMOVE_ALPHA",
|
151
201
|
default_value: false,
|
152
202
|
description: "Remove the alpha channel from generated PNG",
|
153
203
|
optional: true,
|
154
|
-
type: Boolean)
|
204
|
+
type: Boolean),
|
205
|
+
FastlaneCore::ConfigItem.new(key: :messages_extension,
|
206
|
+
env_name: "APPICON_MESSAGES_EXTENSION",
|
207
|
+
default_value: false,
|
208
|
+
description: "App icon is generated for Messages extension",
|
209
|
+
optional: true,
|
210
|
+
type: Boolean),
|
211
|
+
FastlaneCore::ConfigItem.new(key: :minimagick_cli,
|
212
|
+
env_name: "APPICON_MINIMAGICK_CLI",
|
213
|
+
description: "Set MiniMagick CLI (auto picked by default). Values are: graphicsmagick, imagemagick",
|
214
|
+
optional: true,
|
215
|
+
type: String,
|
216
|
+
verify_block: proc do |value|
|
217
|
+
av = %w(graphicsmagick imagemagick)
|
218
|
+
UI.user_error!("Unsupported minimagick cli '#{value}', must be: #{av}") unless av.include?(value)
|
219
|
+
end)
|
155
220
|
]
|
156
221
|
end
|
157
222
|
|
@@ -1,10 +1,26 @@
|
|
1
|
+
require 'mini_magick'
|
2
|
+
|
1
3
|
module Fastlane
|
2
4
|
module Helper
|
3
5
|
class AppiconHelper
|
4
|
-
def self.check_input_image_size(image,
|
5
|
-
UI.user_error!("Minimum width of input image should be #{
|
6
|
-
UI.user_error!("Minimum height of input image should be #{
|
7
|
-
UI.user_error!("Input image should be square") if image.width
|
6
|
+
def self.check_input_image_size(image, width, height)
|
7
|
+
UI.user_error!("Minimum width of input image should be #{width}") if image.width < width
|
8
|
+
UI.user_error!("Minimum height of input image should be #{height}") if image.height < height
|
9
|
+
UI.user_error!("Input image should be square") if image.width / image.height != width / height
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.set_cli(minimagick_cli)
|
13
|
+
MiniMagick.configure do |config|
|
14
|
+
case minimagick_cli
|
15
|
+
when "graphicsmagick"
|
16
|
+
config.cli = :graphicsmagick
|
17
|
+
when "imagemagick"
|
18
|
+
config.cli = :imagemagick
|
19
|
+
else
|
20
|
+
config.cli = MiniMagick.cli()
|
21
|
+
end
|
22
|
+
config.timeout = 5
|
23
|
+
end
|
8
24
|
end
|
9
25
|
|
10
26
|
def self.get_needed_icons(devices, needed_icons, is_android = false, custom_sizes = {})
|
metadata
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fastlane-plugin-appicon
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.16.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Boris Bügling
|
8
8
|
- Felix Krause
|
9
|
-
autorequire:
|
9
|
+
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2021-03-25 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: mini_magick
|
@@ -129,7 +129,7 @@ dependencies:
|
|
129
129
|
- - ">="
|
130
130
|
- !ruby/object:Gem::Version
|
131
131
|
version: 1.95.0
|
132
|
-
description:
|
132
|
+
description:
|
133
133
|
email: boris@icculus.org
|
134
134
|
executables: []
|
135
135
|
extensions: []
|
@@ -146,7 +146,7 @@ homepage: https://github.com/fastlane-community/fastlane-plugin-appicon
|
|
146
146
|
licenses:
|
147
147
|
- MIT
|
148
148
|
metadata: {}
|
149
|
-
post_install_message:
|
149
|
+
post_install_message:
|
150
150
|
rdoc_options: []
|
151
151
|
require_paths:
|
152
152
|
- lib
|
@@ -161,8 +161,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
161
161
|
- !ruby/object:Gem::Version
|
162
162
|
version: '0'
|
163
163
|
requirements: []
|
164
|
-
rubygems_version: 3.0.
|
165
|
-
signing_key:
|
164
|
+
rubygems_version: 3.0.3
|
165
|
+
signing_key:
|
166
166
|
specification_version: 4
|
167
167
|
summary: Generate required icon sizes and iconset from a master application icon.
|
168
168
|
test_files: []
|