App Icon Generator
One image in, a submittable icon set out — with the adaptive safe zone drawn on and the transparency problem caught before you upload.
Drop an image here
A square image of 1024px or larger. Both stores want 1024. Nothing is uploaded.
The iOS icon is always flattened onto this, because transparency is a submission rejection.
Inset as a percentage. Applied on top of the adaptive safe-zone inset on Android.
Guides are never written into the exported files.
Preview — — to export
Everything here runs on your device. Nothing you enter is uploaded or stored.
Exporting app icons is mostly arithmetic, and the arithmetic is not the hard part. The hard part is three platform rules that turn a perfectly good image into a rejected upload or an icon with its corners cut off, and almost no generator mentions any of them.
How to use it
- Drop a square image of 1024 pixels or more onto the panel.
- Pick the platform. iOS fills the background for you; Android insets the artwork into the adaptive safe zone.
- On Android, check that your mark sits inside the blue safe circle.
- Download the ZIP and drop the folders into your project.
The alpha channel rule that fails at submission
App Store Connect rejects an app icon with an alpha channel. Not warns — rejects, at upload, after everything else is done.
This catches people constantly because the natural source for an icon is a logo, and logos are saved as transparent PNGs. Every step before submission works fine. Xcode builds, the simulator shows the icon, the archive validates. Then the upload fails with a message about the icon format that does not mention transparency at all.
The fix is to flatten onto a background before export, which is what this tool does for iOS by default. The reason it must be deliberate rather than automatic-and-silent: flattening a transparent image onto nothing produces black, so an icon exported carelessly comes out as a solid black square with an invisible logo in it. The background colour control exists precisely so you choose what it flattens onto.
The adaptive icon crop
An Android adaptive icon is two layers, each 108dp square. The launcher composites them, then shows only the middle 72dp — two thirds of the width, which is about 44 per cent of the area. Everything outside that is thrown away on every device.
Then it gets masked. The shape depends on the launcher and the manufacturer: a circle, a squircle, a rounded square, a teardrop on some older skins. Because you cannot know which, the only region guaranteed to be visible is the largest circle inside the viewport, which is 66dp across — roughly 61 per cent of the layer.
So artwork occupying the full 108dp layer loses its edges everywhere, and artwork sized for the 72dp viewport still gets clipped at the corners by a circular mask. This tool insets the artwork to the 66dp safe circle automatically and draws both boundaries over the preview: the dashed red square is the viewport, the blue circle is what actually survives.
The exported layers never contain the guides. They are a preview aid only.
Why the iOS set is one file
Before Xcode 14, an asset catalogue needed a separate PNG for every idiom and scale factor — thirteen files for a universal app, more with iMessage and watch targets. Xcode 14 replaced that with a single 1024×1024 source, from which it generates every size at build time.
The minimal set here is therefore one file, and the note under the control says so, because a generator that hands you one PNG when you expected eighteen looks broken rather than current. The full legacy catalogue is still available for projects that need it.
Android needs both kinds of icon
The ZIP contains the legacy ic_launcher.png for each density bucket and the adaptive ic_launcher_foreground.png layers at 108dp for each bucket. Both are required: adaptive-only breaks launchers older than Android 8, and legacy-only means modern launchers cannot mask your icon properly and will letterbox it inside a white shape instead.
The ic_launcher.xml that declares the adaptive icon is generated too, including the monochrome layer that Android 13 and later uses for themed icons, plus the colour resource line you need to add. Without that XML the layers sit in the project doing nothing, which is a genuinely confusing failure.
Everything renders on your own device. The image is never uploaded.
Questions
Why was my app icon rejected for having an alpha channel?
App Store Connect requires the 1024×1024 icon to be fully opaque, and it rejects any icon carrying transparency. Designers work from logos saved as transparent PNGs, so this catches people at the final step with an error that does not explain itself. Set a background colour here and the exported iOS icon is flattened onto it. Do not flatten onto transparent black by accident — that is how an icon ends up solid black.
How much of an Android adaptive icon actually gets shown?
The layer is 108dp and the launcher only ever displays the middle 72dp — two thirds by width, so roughly 44 per cent of the area. Worse, the visible region is then masked to a circle, squircle or rounded square depending on the device, so only a 66dp circle is guaranteed. Artwork drawn to the edges of the layer loses its edges, which is why so many published apps have icons with shaved corners.
Do I still need eighteen separate iOS icon files?
Not since Xcode 14. A single 1024×1024 image in the asset catalogue is enough, and Xcode generates every other size at build time. The full legacy set is here for older projects, but for anything current the one file is the correct answer and a folder of eighteen is just noise.
What is the difference between the launcher icon and the adaptive foreground?
They are two different assets. The legacy launcher icon is a complete, square, opaque image used by pre-Oreo launchers. The adaptive foreground is a transparent layer meant to sit over a separate background layer, inset so the mask does not crop it. You need both — adaptive-only breaks old launchers, legacy-only means your icon is not masked correctly on modern ones.
Last updated