-
-
Save roblabs/527458cbe46b0483cd2d594c7b9e583f to your computer and use it in GitHub Desktop.
Generate app icons and xcassets file from a single image. To use this, place script in `appname` folder inside your project (i.e. the folder that Xcode generates for you containing your source code, it's named after whatever you called the app). Create folder there called `RawImages`. Source icon should 1024x1024 and be called appIcon.png. If th…
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash -e | |
# -------------------------------------------------------- | |
# Generate app icons and xcassets file from a single image | |
# Ben Clayton, Calvium Ltd. | |
# https://gist.github.com/benvium/2be6d673aa9ac284bb8a | |
# -------------------------------------------------------- | |
# | |
# Usage with an input of 1024x1024 PNG file | |
# generateAppIcon.sh AppIcon.png | |
# | |
# Updated in October 2017 for RobLabs.com | |
# https://gist.github.com/roblabs/527458cbe46b0483cd2d594c7b9e583f | |
# Based on Xcode Version 9.0 (9A235) | |
# requires imagemagick | |
# `brew install imagemagick` | |
sourceIconName=$1 | |
# Ensure we're running in location of script. | |
#cd "`dirname $0`" | |
# Check imagemagick is installed | |
# http://stackoverflow.com/questions/592620/check-if-a-program-exists-from-a-bash-script | |
command -v convert >/dev/null 2>&1 || { echo >&2 "I require imagemagick but it's not installed. Aborting."; exit 1; } | |
iconPath="./Assets.xcassets/AppIcon.appiconset" | |
mkdir -p "$iconPath" | |
# iPhone Notification | |
convert $sourceIconName -resize 40x40 $iconPath/[email protected] | |
convert $sourceIconName -resize 60x60 $iconPath/[email protected] | |
# iPhone Spotlight Settings | |
convert $sourceIconName -resize 29x29 $iconPath/iPhone-Spotlight-Settings-29pt.png | |
convert $sourceIconName -resize 58x58 $iconPath/[email protected] | |
convert $sourceIconName -resize 87x87 $iconPath/[email protected] | |
# iPhone Spotlight | |
convert $sourceIconName -resize 80x80 $iconPath/[email protected] | |
convert $sourceIconName -resize 120x120 $iconPath/[email protected] | |
# iPhone App | |
convert $sourceIconName -resize 120x120 $iconPath/[email protected] | |
convert $sourceIconName -resize 180x180 $iconPath/[email protected] | |
# iPad Notifications | |
convert $sourceIconName -resize 20x20 $iconPath/iPad-Notifications-20pt.png | |
convert $sourceIconName -resize 40x40 $iconPath/[email protected] | |
# iPad Settings | |
convert $sourceIconName -resize 29x29 $iconPath/iPad-Settings-29pt.png | |
convert $sourceIconName -resize 58x58 $iconPath/[email protected] | |
# iPad Spotlight | |
convert $sourceIconName -resize 40x40 $iconPath/iPad-Spotlight-40pt.png | |
convert $sourceIconName -resize 80x80 $iconPath/[email protected] | |
# iPad App | |
convert $sourceIconName -resize 76x76 $iconPath/iPad-App-76pt.png | |
convert $sourceIconName -resize 152x152 $iconPath/[email protected] | |
# iPad Pro App | |
convert $sourceIconName -resize 167x167 $iconPath/[email protected] | |
# iOS Marketing | |
convert $sourceIconName -resize 1024x1024 $iconPath/[email protected] | |
cat > "$iconPath/Contents.json" << EOF | |
{ | |
"images": [ | |
{ | |
"size": "20x20", | |
"idiom": "iphone", | |
"filename": "[email protected]", | |
"scale": "2x" | |
}, | |
{ | |
"size": "20x20", | |
"idiom": "iphone", | |
"filename": "[email protected]", | |
"scale": "3x" | |
}, | |
{ | |
"size": "29x29", | |
"idiom": "iphone", | |
"filename": "iPhone-Spotlight-Settings-29pt.png", | |
"scale": "1x" | |
}, | |
{ | |
"size": "29x29", | |
"idiom": "iphone", | |
"filename": "[email protected]", | |
"scale": "2x" | |
}, | |
{ | |
"size": "29x29", | |
"idiom": "iphone", | |
"filename": "[email protected]", | |
"scale": "3x" | |
}, | |
{ | |
"size": "40x40", | |
"idiom": "iphone", | |
"filename": "[email protected]", | |
"scale": "2x" | |
}, | |
{ | |
"size": "40x40", | |
"idiom": "iphone", | |
"filename": "[email protected]", | |
"scale": "3x" | |
}, | |
{ | |
"size": "60x60", | |
"idiom": "iphone", | |
"filename": "[email protected]", | |
"scale": "2x" | |
}, | |
{ | |
"size": "60x60", | |
"idiom": "iphone", | |
"filename": "[email protected]", | |
"scale": "3x" | |
}, | |
{ | |
"size": "20x20", | |
"idiom": "ipad", | |
"filename": "iPad-Notifications-20pt.png", | |
"scale": "1x" | |
}, | |
{ | |
"size": "20x20", | |
"idiom": "ipad", | |
"filename": "[email protected]", | |
"scale": "2x" | |
}, | |
{ | |
"size": "29x29", | |
"idiom": "ipad", | |
"filename": "iPad-Settings-29pt.png", | |
"scale": "1x" | |
}, | |
{ | |
"size": "29x29", | |
"idiom": "ipad", | |
"filename": "[email protected]", | |
"scale": "2x" | |
}, | |
{ | |
"size": "40x40", | |
"idiom": "ipad", | |
"filename": "iPad-Spotlight-40pt.png", | |
"scale": "1x" | |
}, | |
{ | |
"size": "40x40", | |
"idiom": "ipad", | |
"filename": "[email protected]", | |
"scale": "2x" | |
}, | |
{ | |
"size": "76x76", | |
"idiom": "ipad", | |
"filename": "iPad-App-76pt.png", | |
"scale": "1x" | |
}, | |
{ | |
"size": "76x76", | |
"idiom": "ipad", | |
"filename": "[email protected]", | |
"scale": "2x" | |
}, | |
{ | |
"size": "83.5x83.5", | |
"idiom": "ipad", | |
"filename": "[email protected]", | |
"scale": "2x" | |
}, | |
{ | |
"size": "1024x1024", | |
"idiom": "ios-marketing", | |
"filename": "[email protected]", | |
"scale": "1x" | |
} | |
], | |
"info": { | |
"version": 1, | |
"author": "xcode" | |
}, | |
"properties": { | |
"pre-rendered": true | |
} | |
} | |
EOF |
@fagianijunior
Prepend png32:
to each output file like so:
convert $sourceIconName -resize 40x40 png32:$iconPath/[email protected]
Update for Xcode 12.4 (iOS 7 - 14)
#!/bin/bash -e
# --------------------------------------------------------
# Generate app icons and xcassets file from a single image
# Ben Clayton, Calvium Ltd.
# https://gist.github.com/benvium/2be6d673aa9ac284bb8a
# --------------------------------------------------------
# To use this, place script in `appname` folder inside your project (i.e. the folder that Xcode generates for you containing your source code, it's named after whatever you called the app).
# Create folder there called `RawImages`.
# Source icon should 1024x1024 and be called Icon.png. If the icon changes, you can just run this again to regenerate everything.
# This script assumes that you have the default setup of an Images.xcassets file containing the Icon.Iconset.
# Adjust iconPath below if you use something different
sourceIconName="App-Store-1024x1024.png"
# Ensure we're running in location of script.
#cd "`dirname $0`"
# Check imagemagick is installed
# http://stackoverflow.com/questions/592620/check-if-a-program-exists-from-a-bash-script
command -v convert >/dev/null 2>&1 || { echo >&2 "I require imagemagick but it's not installed. Aborting."; exit 1; }
iconPath="Assets.xcassets/AppIcon.appiconset"
mkdir -p "$iconPath"
# clean it out
rm -rf $iconPath/*.png
# iOS 7-14
# iPhone-Notification
convert $sourceIconName -resize 40x40 $iconPath/[email protected]
convert $sourceIconName -resize 60x60 $iconPath/[email protected]
# iPhone
convert $sourceIconName -resize 58x58 $iconPath/[email protected]
convert $sourceIconName -resize 87x87 $iconPath/[email protected]
# iPhone Spotlight
convert $sourceIconName -resize 80x80 $iconPath/[email protected]
convert $sourceIconName -resize 120x120 $iconPath/[email protected]
# iPhone App
convert $sourceIconName -resize 120x120 $iconPath/[email protected]
convert $sourceIconName -resize 180x180 $iconPath/[email protected]
# iPad Notifications
convert $sourceIconName -resize 20x20 $iconPath/[email protected]
convert $sourceIconName -resize 40x40 $iconPath/[email protected]
# iPad Settings
convert $sourceIconName -resize 29x29 $iconPath/[email protected]
convert $sourceIconName -resize 58x58 $iconPath/[email protected]
# iPad Spotlight
convert $sourceIconName -resize 40x40 $iconPath/[email protected]
convert $sourceIconName -resize 80x80 $iconPath/[email protected]
# iPad App
convert $sourceIconName -resize 76x76 $iconPath/[email protected]
convert $sourceIconName -resize 152x152 $iconPath/[email protected]
# iPad Pro
convert $sourceIconName -resize 167x167 $iconPath/iPad [email protected]
# App Store
# Use the 1024x1024.png
cat > "$iconPath/Contents.json" << EOF
{
"images" : [
{
"filename" : "[email protected]",
"idiom" : "iphone",
"scale" : "2x",
"size" : "20x20"
},
{
"filename" : "[email protected]",
"idiom" : "iphone",
"scale" : "3x",
"size" : "20x20"
},
{
"filename" : "[email protected]",
"idiom" : "iphone",
"scale" : "2x",
"size" : "29x29"
},
{
"filename" : "[email protected]",
"idiom" : "iphone",
"scale" : "3x",
"size" : "29x29"
},
{
"filename" : "[email protected]",
"idiom" : "iphone",
"scale" : "2x",
"size" : "40x40"
},
{
"filename" : "[email protected]",
"idiom" : "iphone",
"scale" : "3x",
"size" : "40x40"
},
{
"filename" : "[email protected]",
"idiom" : "iphone",
"scale" : "2x",
"size" : "60x60"
},
{
"filename" : "[email protected]",
"idiom" : "iphone",
"scale" : "3x",
"size" : "60x60"
},
{
"filename" : "[email protected]",
"idiom" : "ipad",
"scale" : "1x",
"size" : "20x20"
},
{
"filename" : "[email protected]",
"idiom" : "ipad",
"scale" : "2x",
"size" : "20x20"
},
{
"filename" : "[email protected]",
"idiom" : "ipad",
"scale" : "1x",
"size" : "29x29"
},
{
"filename" : "[email protected]",
"idiom" : "ipad",
"scale" : "2x",
"size" : "29x29"
},
{
"filename" : "[email protected]",
"idiom" : "ipad",
"scale" : "1x",
"size" : "40x40"
},
{
"filename" : "[email protected]",
"idiom" : "ipad",
"scale" : "2x",
"size" : "40x40"
},
{
"filename" : "[email protected]",
"idiom" : "ipad",
"scale" : "1x",
"size" : "76x76"
},
{
"filename" : "[email protected]",
"idiom" : "ipad",
"scale" : "2x",
"size" : "76x76"
},
{
"filename" : "[email protected]",
"idiom" : "ipad",
"scale" : "2x",
"size" : "83.5x83.5"
},
{
"filename" : "App-Store-1024x1024.png",
"idiom" : "ios-marketing",
"scale" : "1x",
"size" : "1024x1024"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
EOF
From Xcode 12.4
How to generate launch screen images (not app icons) with the script?
@roblabs thanks for the script, works well. The only missing thing was a dash for iPad Pro icon (currently it has space in it)
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
generate icons with alfa channel?