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+.
Medium because the failure mode is a blocking submission error rather than a security or data integrity issue, but it halts every release cycle.
Create a 1024×1024 PNG with zero transparency. Verify with ImageMagick before submission:
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.
app-store-metadata-listing.listing-content.icon-compliantmediumassets/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.icon and android.adaptiveIcon.foregroundImage are configured. At least 1 implementation must be confirmed.app.json references an icon file that does not exist in the repository.screenshots-actual-ui check validates the visual assets that accompany the icon verified here."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".app.json has both "icon": "./assets/icon.png" and "android": { "adaptiveIcon": { "foregroundImage": "...", "backgroundColor": "#FFFFFF" } }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.