App Icon Set Generator
Drop one 1024px image and download every iOS and Android icon size — Contents.json and mipmap folders included, nothing uploaded.
Do it offline:$ magick icon-1024.png -resize 180x180 AppIcon-60@3x.png
How to use it
- Drop your icon master on the page or pick it with the button — a square PNG, JPEG or WebP up to 20 MB, 1024×1024 px if you have it.
- Toggle the platforms you ship. iOS plans AppIcon.appiconset with Contents.json; Android plans the five mipmap launcher folders plus the Play listing icon and the adaptive foreground.
- Pick the iOS catalog mode — full 18-slot matrix for any Xcode, or the single 1024 px image Xcode 14 and later expands itself — and a flatten color if your art has transparency.
- Press Download zip (or ⌘/Ctrl + S) and drag each folder into your project — README.txt inside restates where every file goes.
Drop one square image — ideally your 1024 px master — and download every iOS and Android app icon size in one zip: AppIcon.appiconset with its Contents.json for Xcode, mipmap launcher folders for Android Studio, the 512 px Google Play listing icon and a single-layer adaptive foreground. Resizing and zipping run in your browser — keep the DevTools Network panel open and watch no bytes leave this device.
How it works
An installed app never shows its icon at one size: the home screen, Spotlight, Settings and notifications each request their own, and an Xcode asset catalog stores one slot per context per device family — that is why icon matrices exist.
Each slot is declared in points with a scale factor, and the pixel size is the product: the 60 pt home-screen slot at @3x is 180 px; the iPad Pro's 83.5 pt at @2x is 167 px. Slots sharing a point size and scale across iPhone and iPad reuse one file, as Xcode templates do — 18 catalog entries, 15 PNGs.
Xcode 14 added a shorter path: one 1024×1024 image marked "platform": "ios", every runtime size derived at build time. Both modes ship here because older Xcode versions and some CI pipelines still expect explicit per-slot files.
Android buckets launcher icons by screen density instead: the 48 px mdpi baseline scales by 1.5, 2, 3 and 4 into 72, 96, 144 and 192 px, one mipmap folder each. The adaptive foreground is different — a 108 dp layer canvas, 432 px at xxxhdpi, of which only the inner 66 dp circle survives every launcher mask.
Examples
iOS only, full matrix15 PNGs · 20–1024 px · Contents.json with 18 entries · 17 files zippedThe digest of a full iOS build: 18 slots collapse to 15 unique PNGs, 20 px up to the 1024 marketing icon, plus manifest and README — every figure computed from the plan.
Android only, full matrixmipmap-mdpi/ic_launcher.png · 48 px
mipmap-hdpi/ic_launcher.png · 72 px
mipmap-xhdpi/ic_launcher.png · 96 px
mipmap-xxhdpi/ic_launcher.png · 144 px
mipmap-xxxhdpi/ic_launcher.png · 192 px
ic_launcher-playstore.png · 512 px
mipmap-xxxhdpi/ic_launcher_foreground.png · 432 pxThe Android plan verbatim — five density-bucket launchers on the 48 px baseline, the Play Console listing icon at 512 px, and the 432 px adaptive foreground layer.
Both platforms, single-size iOS, flatten #0f172a{
"images": [
{
"filename": "AppIcon-1024.png",
"idiom": "universal",
"platform": "ios",
"size": "1024x1024"
}
],
"info": {
"author": "xcode",
"version": 1
}
}
Contents.json in single-size mode, byte-for-byte: one universal entry. This zip is 8 images and 10 files, and the 1024 px job is the only one flattened onto the chosen color.
Every example on this page is executed against the same engine that powers the tool, on every build.
Gotchas worth knowing
The App Store marketing icon must not contain alpha
Apple rejects a 1024 px icon that carries an alpha channel. When transparent pixels are detected and iOS is on, the warning chip says so and that file is flattened onto your chosen color — smaller full-matrix sizes keep your pixels; single-size mode ships only the flattened 1024, which Xcode expands into every slot.
The adaptive foreground is one layer, not two
Real adaptive icons are two layers — a foreground and a background — and this tool rasters your single image into the foreground layer only. Your mark sits inside the 66 dp safe zone (264 of 432 px) so any mask keeps it whole; point the icon XML at a background of your own.
Non-square sources are center-cropped, not stretched
Every slot is square, so a rectangular source loses something: a centered square crop applies before any resize, and the chip prints your exact dimensions.
Sources below 1024 px are upscaled into the biggest slots
A 512 px source makes crisp launchers but a soft App Store image — pixels above the source size are interpolation. The upscale chip prints your real size beside the recommended 1024.
Common errors
No platform is selected — turn on iOS, Android, or both to build an icon set.- Both platform toggles are off, so the plan is empty. Turn either back on and the size matrix repopulates immediately.
"salmon-ish" is not a usable flatten color — use 3- or 6-digit hex like #0ea5e9.- The flatten color reached the engine as something other than hex — usually a hand-edited share link. The picker only emits valid values; reselect any color to clear it.
This image is 12,000×12,000 px — the limit is 10,000 px per side. Resize it first; every icon here is 1024 px or smaller.- Decode metadata reported a side past 10,000 px — far beyond any icon slot. Halve the image once in any editor and it passes with no visible cost.
FAQ
Does my logo upload anywhere while the icons generate?
No — decoding, resizing and zip assembly execute in your browser on this device. Generate a set with the DevTools Network panel open — the request log stays empty from drop to download.
Which iOS mode should I pick — full matrix or single 1024?
Single 1024 if your team builds with Xcode 14 or later — one image, nothing to regenerate when Apple adjusts slot lists. Ship the full matrix when an older Xcode or a CI system needs explicit files.
Why is the adaptive icon file larger than the launcher icons?
It is a layer, not a finished icon: adaptive layers are 108 dp square — 432 px at xxxhdpi against 192 px for the launcher PNG beside it — and launchers mask and move them. Only the inner 66 dp circle is safe everywhere.
Where do the Android files go in my project?
Copy each mipmap-* folder into app/src/main/res/ beside the existing ones, and upload ic_launcher-playstore.png in the Play Console instead of packaging it — the README repeats both paths.