App icon

App Icon Generator

One square image in; the folders Xcode and Gradle expect out. The tedious part of an app icon was never the resizing — it is the Contents.json that has to name every idiom, scale and point size exactly, and the Android adaptive layers whose safe circle is tighter than anyone expects. Both are generated here, and the artwork is checked against that circle before you export.

Source the stores want
1024
Android densities
5
Adaptive safe circle
66 of 108dp
Bytes uploaded
0

Step by step

How to use it

  1. 01Drop a square source

    1024 × 1024 or larger, PNG or SVG. Anything smaller means the marketing icon is an upscale, which the App Store rejects — so the size is checked and reported rather than silently accepted.

  2. 02Size the artwork for Android

    iOS masks the square you give it, so it needs no inset. Android guarantees only the inner 66 of 108dp, and that is the constraint the artwork size control exists to satisfy.

  3. 03Choose the iOS catalogue shape

    One 1024 PNG by default, which Xcode 15 and later expand at build time. Switch on the legacy sizes for an older project and the full matrix is written with a matching Contents.json.

  4. 04Take the zip

    ios/AppIcon.appiconset and android/mipmap-* laid out the way each toolchain expects, so the folders drop straight into a project.

Worked example

Why hand-built asset catalogues fail validation

Contents.json describes each icon by point size and scale, not by pixels. The file name has to be the product of the two, and nothing warns you when it is not.

Given

Entry
60pt at 3× for iPhone
Expected file
180 × 180 pixels
Common mistake
a 60 × 60 file

How a catalogue entry maps to a file

size "60x60"   scale "3x"   →  180px file
size "40x40"   scale "2x"   →   80px file
size "83.5x83.5" scale "2x" →  167px file

The 83.5pt iPad entry is the one people get wrong most:
it is a fractional point size and a 167px file.
Sizes are points
not pixels
Pixels
size × scale
iPad 83.5pt at 2×
167px

Xcode reports a missing or mis-sized icon as a warning during development and a hard rejection at submission, which is why the problem tends to surface on the day you ship. The arithmetic is simple and unforgiving, and it is the entire reason this file is generated rather than written by hand — including the 83.5pt iPad entry that produces an odd 167-pixel file.

Before you drop it into the project

What to know about app icons

Xcode 15 wants one file, not thirteen

A single 1024 × 1024 image in the asset catalogue is the documented recommendation, with Xcode generating every other size at build time. The full matrix is now only needed for older projects, and carrying it means thirteen files to keep in step instead of one.

iOS icons must be opaque

iOS composites no alpha on an app icon and rejects one that carries any, so the background is always painted here even where the artwork would not have covered it. Rounded corners are the system's job — supply a full square and let it mask.

Android's safe circle is the tight one

An adaptive icon is drawn on 108dp, masked to 72dp, and guarantees only the inner 66dp — about 61%, against the 80% a maskable web icon promises. Artwork sized for iOS will usually overflow it, which is what the check here is for.

Adaptive icons are two layers, not one image

The launcher moves the foreground and background independently to produce the parallax effect, so they cannot be flattened. The artwork becomes the foreground on transparency, and the background colour is written as an XML colour resource the layer references.

Use mipmap, not drawable

Launcher icons belong in mipmap directories because a launcher may request a density other than the device's own, and only mipmap resources survive density splitting when an APK is built per-density. Icons placed in drawable can go missing on some devices.

The Play Store icon is uploaded, not bundled

Google Play wants a 512 × 512 PNG in the console listing rather than in the APK, so it is exported alongside the mipmaps instead of inside them. It is easy to miss and blocks a release when it is.

The judgement call

Which catalogue shape do you need?

The iOS half has two forms, and the project decides.

  • A project on Xcode 15 or later

    Single size

    One 1024 PNG, expanded at build time. Fewer files, nothing to keep in step.

  • A project on Xcode 14

    Single size

    Single-size catalogues were introduced in Xcode 14, so this is supported there too.

  • A project on Xcode 13 or older

    Legacy sizes

    Single-size catalogues are not understood, and the build will report the icon as missing.

  • A React Native or Flutter project

    Legacy sizes

    Their tooling and templates generally still expect the full matrix on disk.

  • An Android-only app

    Skip iOS

    Export Android alone and you get the mipmap tree, the adaptive layers, and the Play Store icon.

  • A web app you are wrapping

    Maskable icon instead

    A PWA needs manifest icons rather than an asset catalogue. The maskable icon tool covers that.

Reference

What is in the export

iOS, single size
1024 PNG + Contents.jsonThe Xcode 15 recommendation. Every other size is generated by Xcode at build time.
iOS, legacy
13 files + Contents.jsoniPhone and iPad idioms from 20pt to 83.5pt, plus the 1024 marketing icon.
Android densities
mdpi to xxxhdpi48, 72, 96, 144 and 192px launcher icons, in mipmap directories rather than drawable.
Adaptive layers
108dp foreground per density162, 216, 324 and 432px foregrounds on transparency, with the background as an XML colour resource.
Adaptive XML
mipmap-anydpi-v26ic_launcher.xml and ic_launcher_round.xml, because a launcher may ask for either name.
Play Store
512 × 512 PNGUploaded to the Play Console listing rather than bundled in the APK.

FAQ

Questions, answered plainly

What size should an app icon be for iOS?

Supply a single 1024 × 1024 PNG. Since Xcode 14, and as the documented recommendation from Xcode 15, an asset catalogue can carry one 1024 image and Xcode generates every other size at build time. Older projects need the full matrix from 20pt to 83.5pt across iPhone and iPad idioms, which this tool can also export.

Why does Xcode say my app icon is missing or the wrong size?

Because Contents.json describes icons in points with a scale multiplier, and the file must be the product of the two — a 60pt entry at 3× needs a 180-pixel image, not a 60-pixel one. The 83.5pt iPad entry catches people out most, since it produces an odd 167-pixel file. Generating the catalogue rather than writing it by hand removes the whole class of error.

What is the safe zone for an Android adaptive icon?

The layers are drawn on a 108dp canvas, the launcher masks to 72dp, and only the inner 66dp — about 61% — is guaranteed visible across every launcher shape. The outer band is not padding to fill: it exists so the foreground and background layers can move independently during the launcher's parallax animation.

Why do Android launcher icons go in mipmap instead of drawable?

A launcher may request an icon at a density other than the device's own, and only mipmap resources survive the density splitting that happens when an APK is built per-density. Icons placed in drawable directories can therefore be stripped and go missing on some devices, which is why every Android export here writes to mipmap.

Can I use a non-square image as an app icon?

You can supply one and it will be fitted inside the square with the background filling the remainder, but the result is rarely what you want. Both stores expect a square icon, and a mark that was drawn wide will end up small once it fits the height. Crop the source square first for a better result.

Does this app icon generator upload my artwork?

No. The Tinapps app icon generator decodes the source in your browser, redraws every size on a canvas in the page, and assembles the zip there too. Nothing is transmitted, which matters when the icon belongs to an app that has not been announced.

The source image is decoded, redrawn and zipped entirely in your browser. Nothing is uploaded at any point.

All design toolsTinapps homeFree · no account · nothing leaves your browser