fastlane-plugin-appicon 0.15.0 → 0.16.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 +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: []
|