iOS
| Icon | Size | Notes |
|---|---|---|
| App icon (Xcode 14+) | 1024 × 1024 px | Opaque, square, no rounded corners |
| Dark (iOS 18) | 1024 × 1024 px | Transparent background |
| Tinted (iOS 18) | 1024 × 1024 px | Grayscale |
Legacy size set
| Device | Points | Scale | Pixels |
|---|---|---|---|
| iPhone | 20pt | @2x | 40 px |
| iPhone | 20pt | @3x | 60 px |
| iPhone | 29pt | @2x | 58 px |
| iPhone | 29pt | @3x | 87 px |
| iPhone | 40pt | @2x | 80 px |
| iPhone | 40pt | @3x | 120 px |
| iPhone | 60pt | @2x | 120 px |
| iPhone | 60pt | @3x | 180 px |
| iPad | 20pt | @1x | 20 px |
| iPad | 20pt | @2x | 40 px |
| iPad | 29pt | @1x | 29 px |
| iPad | 29pt | @2x | 58 px |
| iPad | 40pt | @1x | 40 px |
| iPad | 40pt | @2x | 80 px |
| iPad | 76pt | @1x | 76 px |
| iPad | 76pt | @2x | 152 px |
| iPad | 83.5pt | @2x | 167 px |
| App Store | 1024pt | @1x | 1024 px |
Setup: iOS app icon guide.
Android
| Density | Scale | Legacy / round 48dp | Adaptive layer 108dp | Visible 72dp |
|---|---|---|---|---|
| mdpi | 1x | 48 px | 108 px | 72 px |
| hdpi | 1.5x | 72 px | 162 px | 108 px |
| xhdpi | 2x | 96 px | 216 px | 144 px |
| xxhdpi | 3x | 144 px | 324 px | 216 px |
| xxxhdpi | 4x | 192 px | 432 px | 288 px |
- Keep important content in the central 66dp of adaptive layers; launchers mask and move them.
- The themed (monochrome) layer has the same size as the foreground; only its alpha is used.
- Google Play store icon: 512 × 512 px PNG.
Setup: Android adaptive icon guide.
Expo
| app.json field | Image |
|---|---|
icon | 1024 × 1024 px, opaque |
android.adaptiveIcon.foregroundImage | 1024 × 1024 px, artwork in the inner 2/3 |
android.adaptiveIcon.monochromeImage | 1024 × 1024 px, one color on transparent |
ios.icon.dark / tinted | 1024 × 1024 px |
Setup: Expo app icon guide.
Flutter
flutter_launcher_icons takes 1024px source images (image_path, adaptive_icon_foreground, adaptive_icon_monochrome) and writes all of the sizes above. Setup: Flutter app icon guide.