# App icon compliant — 1024×1024 with no alpha channel (iOS), no misleading badges

- **Pattern:** `ab-000426` (`app-store-metadata-listing.listing-content.icon-compliant`)
- **Severity:** medium
- **Lifecycle:** active
- **Last modified:** 2026-04-18
- **Canonical URL:** https://auditbuffet.com/patterns/ab-000426
- **License:** CC-BY-4.0 — attribute to AuditBuffet Pattern Catalog (https://auditbuffet.com/patterns/ab-000426)

## Why it matters

Apple's binary validation runs before any human reviewer sees the app. A 1024×1024 marketing icon with an alpha channel fails binary validation immediately — the submission is rejected with a cryptic asset error, not a guideline violation, which means no appeal pathway. Badge overlays ('FREE', '#1', 'Award') violate Apple Guideline 2.3.6 and trigger rejection during human review. Shipping the default Expo or React Native framework icon signals an unfinished product, increasing the likelihood of rejection on subjective 'minimum functionality' grounds. On Android, a missing `ic_launcher_round.png` causes visual corruption on adaptive-icon-capable devices running Android 8+.

## Severity rationale

Medium because the failure mode is a blocking submission error rather than a security or data integrity issue, but it halts every release cycle.

## Remediation

Create a 1024×1024 PNG with zero transparency. Verify with ImageMagick before submission:

```bash
identify -format "%[channels]" assets/icon.png
# Must NOT show 'rgba' or 'alpha'
```

For Expo, ensure `app.json` has both `icon` and `android.adaptiveIcon.foregroundImage` set and pointing to files that exist in the repository. Do not pre-round icon corners — Apple applies rounding at render time. Remove any badge, text, or ranking overlay from the icon asset itself. Store production icon sources in `src/assets/icon/` with a README noting the no-alpha requirement.

## Detection

- **ID:** `icon-compliant`
- **Severity:** `medium`
- **What to look for:** Locate the app icon source file. For Expo, this is `assets/icon.png` (referenced in `app.json` as `"icon": "./assets/icon.png"`). For React Native CLI, check `ios/[AppName]/Images.xcassets/AppIcon.appiconset/` for the `1024x1024` entry and `android/app/src/main/res/mipmap-*/ic_launcher.png` for Android launcher icons. For Flutter, check `android/app/src/main/res/mipmap-*/` and `ios/Runner/Assets.xcassets/AppIcon.appiconset/`. Check for: (a) iOS requires the 1024×1024 marketing icon to have NO alpha channel (transparent pixels cause automatic rejection) — look for `icon.png` files and note if they appear to have rounded corners baked in (they shouldn't; Apple applies rounding itself), (b) badge overlays in the icon image: "New!", "#1", "Free", "Sale", "Best", "Award", "Top" — Apple explicitly prohibits text or badge overlays that imply endorsement or ranking, (c) icons that are the default framework template icon (Expo's default is a solid blue circle with a white "E"; React Native CLI default is a React logo), (d) icons that mimic another app's icon in color, shape, or design (this overlaps with the impersonation check). For Android, also check if `ic_launcher_round.png` is present (required for adaptive icons on Android 8+). In `app.json`, check that `expo.icon` points to an existing file and `expo.android.adaptiveIcon.foregroundImage` is configured. Count all instances found and enumerate each.
- **Pass criteria:** A 1024×1024 icon source file is present; the icon appears custom (not the framework default); there are no badge overlays or misleading text in the icon; for Expo projects, both `icon` and `android.adaptiveIcon.foregroundImage` are configured. At least 1 implementation must be confirmed.
- **Fail criteria:** No 1024×1024 icon found; icon appears to be the default framework template icon; icon contains badge overlays or ranking text; `app.json` references an icon file that does not exist in the repository.
- **Skip (N/A) when:** Never — icon compliance is always required.
- **Cross-reference:** The `screenshots-actual-ui` check validates the visual assets that accompany the icon verified here.
- **Detail on fail:** `"app.json references './assets/icon.png' but this file is not present in the repository"` or `"Icon appears to be the default Expo template icon (solid blue circle)"` or `"Icon contains 'FREE' badge overlay, which violates App Store guidelines"`.
- **Remediation:** Icon issues cause automatic rejection during Apple's binary validation stage — before any human ever reviews it.
  1. Create a 1024×1024 PNG icon with no alpha/transparency (use a solid background or fully opaque design)
  2. Do not pre-round the corners — Apple applies rounding automatically; a pre-rounded icon with a white corner background looks wrong
  3. Remove any badge text from the icon itself — conveying ratings, pricing, or accolades in the icon is prohibited
  4. For Expo: ensure `app.json` has both `"icon": "./assets/icon.png"` and `"android": { "adaptiveIcon": { "foregroundImage": "...", "backgroundColor": "#FFFFFF" } }`
  5. Verify the icon file actually exists at the path referenced in `app.json`
 Store icon source files in `src/assets/icon/` or `app/assets/`. Export 1024x1024 PNG with no transparency for App Store Connect and `src/assets/icon.png` for the build.

## External references

- external apple-guideline-2.3.6 — https://developer.apple.com/app-store/review/guidelines/#2.3.6

Taxons: findability, content-integrity

HTML version: https://auditbuffet.com/patterns/ab-000426
