What this covers
Your MAM app uses several different images, and they’re not all handled the same way — or from the same place. This article walks through each image type: where you set it, what dimensions and file type it needs, and what MAM does with the file behind the scenes.
They fall into two groups:
- Store/build images — your app icon and launch (splash) screen. These live inside the actual native build submitted to the App Store and Google Play. You upload them on the Publish Your App page, MAM stores them as WordPress media attachments (by attachment ID), and its image manager processes them — resizing, flattening, and using them to auto-generate the splash screen.
- In-app images — the left-menu logo, listing placeholder, avatar placeholder, and similar. These are ordinary in-app images set in the app settings. MAM stores them as image URLs and the app renders them live, so changing one doesn’t require a new build.
Once you know which group an image belongs to, you’ll know where to upload it — and whether the change shows up right away or has to wait for the next build.
Before you start
- You need an admin account (
manage_options). The image upload AJAX handlers explicitly reject anyone without that capability. - Have your source art ready as PNG. The app icon and launch-screen pipeline assume PNG input; the GD resize/composite steps load the source with
imagecreatefrompng(). - Source images must be no larger than 4096×4096. MAM validates dimensions before processing and will refuse a source that is too large or unreadable.
Group 1 — Store/build images (Publish Your App)
You’ll set all of these on the Publish Your App admin page (mam_app_submit). Each one gets its own panel there — click Save App Settings when you’re ready to commit your changes.
App icon
Panel: App Icon
Requirement shown in the UI: 1024×1024 PNG. Used across the App Store and all devices.
Here’s how to set it:
- Open Publish Your App.
- In the App Icon panel, click the image picker (it reads “Click to select app icon” when empty) and choose or upload a square PNG.
- Set the Background Color swatch. MAM uses this color to flatten the icon (more on that below). Note the launch screen has its own separate background color, set on the Launch Screen panel.
- Click Save App Settings.
Here’s what happens behind the scenes when you save:
- MAM stores the chosen image as an attachment ID in the
local-app-images-app-iconoption, and the background color inlocal-app-app-icon-bg. - Flattens transparency. Apple rejects App Store icons that contain an alpha channel — the transparency layer in a PNG (error 90717). So whenever the icon or its background color changes, MAM composites the PNG onto your chosen solid background and overwrites the file in place, giving the uploaded build a fully opaque icon. Under the hood, that’s
flatten_png_alpha()in the image manager. - The icon is “automatically resized for all devices” — upload one large square PNG and MAM derives all the per-device sizes from it. (The resize step,
gd_resize(), produces square PNGs at the requested pixel size, optionally on a solid background.)
The publish checklist flags the icon as not done if it’s missing or smaller than the required size — the message shown is “App icon must be at least 1024×1024 pixels.” Upload a source large enough to clear that blocker.
Launch screen (splash screen)
Panel: Launch Screen
You have two options, picked via radio button:
- Auto-generate from app icon and background color (default). MAM builds the splash images for you, from the app icon plus a launch-screen background color — the recommended path for most apps.
- Upload a custom splash screen. Provide your own image and MAM stores it as the launch-screen attachment, skipping auto-generation entirely.
Here’s how to set it:
- In the Launch Screen panel, choose Auto-generate or Upload a custom splash screen.
- If auto-generating, set the launch-screen background color (stored as
ios_app_launch_screen_bg). - Click Save App Settings.
Here’s what MAM does when auto-generating (generate_launch_screen()):
- Reads the app icon and the launch-screen background color.
- Renders the icon centered on a solid-color canvas at two sizes — 640×1136 and 1125×2436 — saved as
launch_screen_1.pngandlaunch_screen_2.pngin the uploads directory and registered as media attachments. - Regenerates only when something actually changed — the icon, the launch-screen background, or switching off the custom-image option. If you’ve already uploaded a custom splash, auto-generation is skipped.
Options written: mam_launch_screen_use_custom (0/1), and for a custom image, local-app-images-launch-screen-2.
Related splash-screen tuning (App Settings)
A couple of related controls live over in App Settings rather than on Publish Your App, and they affect how a logo sits on the splash:
- Logo Top Offset (px) —
splash_screen_logo_top_offset - Logo Scaling (%) —
logo_scaling
Use these to nudge and size the logo on the splash without regenerating new art.
Group 2 — In-app images (App Settings)
You’ll configure these in App Settings, grouped by the part of the app they affect. Each one uses MAM’s standard image field: a text box for the image URL plus a small inline preview, backed by the WordPress media library (the field carries the mam-image-setting class so you can pick straight from Media). Each value is stored as a URL string, and the app renders it live — so updating one of these does not require a new build.
Left-menu logo / top image
In the Left Menu settings:
- Has left menu logo —
has_left_menu_logo(yes/no). Turn this on to show a logo at the top of the left (slide-out) menu. - Top image Image URL —
home_left_menu_top_image(image). The logo or banner shown at the top of the left menu. - Top image Image Aspect Ratio W/H —
home_left_menu_top_image_aspect(text). Set this so the image renders at the correct proportions.
To add a left-menu logo, enable Has left menu logo, set the Top image Image URL to your logo, and provide the aspect ratio.
Listing placeholder
In the Listings settings:
- Placeholder Image —
listing_placeholder_image(image). Shown for a listing that has no image of its own, so list rows never render blank.
Avatar and form-image placeholders
In the Forms / User Profile settings:
- Avatar placeholder URL —
avatar_placeholder(text/image URL). Default avatar shown when a user has no profile photo. - Show Image Placeholder in Image UI Element —
form_show_image_placeholder(yes/no). Controls whether image form fields show a placeholder prompt when empty. - User Profile Take Photo Button URL —
user_profile_take_photo(URL). The icon used for the take-photo control on the profile screen.
Choosing the right place to upload
| Image | Where | Stored as | Ships with build? |
|---|---|---|---|
| App icon | Publish Your App → App Icon | Attachment ID (local-app-images-app-icon) |
Yes |
| Launch/splash screen | Publish Your App → Launch Screen | Attachment ID + bg color | Yes |
| Left-menu logo | App Settings → Left Menu | URL (home_left_menu_top_image) |
No (live) |
| Listing placeholder | App Settings → Listings | URL (listing_placeholder_image) |
No (live) |
| Avatar placeholder | App Settings → Forms/User Profile | URL (avatar_placeholder) |
No (live) |
Here’s the rule of thumb: if the image shapes how the app looks on the device’s home screen or while launching, it belongs on Publish Your App, and your change won’t take effect until the next build. Everything you see inside the running app, on the other hand, is an in-app image set in App Settings — and it updates without a rebuild.
Troubleshooting
- “App icon must be at least 1024×1024 pixels” on the publish checklist. Your source icon is too small (or missing) — upload a square PNG at 1024×1024 or larger.
- Icon looks fine in the admin but the build is rejected for transparency. The flatten step only runs when you change the icon or its background color and save. Re-save the App Icon panel (tweak the background color too, if you like) to force a fresh flatten onto an opaque background.
- Splash screen didn’t update after I changed the icon. Auto-generation only fires when the icon, the launch-screen background, or the custom-image toggle changes — and not at all while Upload a custom splash screen is selected. Switch back to Auto-generate (or change the background color) and save.
- Source rejected as “too large or unreadable.” Your image exceeds the 4096×4096 dimension limit, or isn’t a valid PNG. Resize or re-export it and try again.
- An in-app image won’t preview in the admin. The image field only shows its inline preview when the stored value is a valid URL — make sure you selected a real media item (or pasted a full URL), not a partial path.
- Upload appears to do nothing / “Unauthorized.” The image AJAX handlers require the
manage_optionscapability — confirm you’re logged in as an administrator.
Verification
This article was last drafted against:
mam-main/includes/app-settings/mam-image-manager.php—mam_app_image_manager(resize, launch-screen generation, alpha flatten, dimension validation).mam-main/includes/publish-app/app-submit.php—mam_app_submit(App Icon and Launch Screen panels, save handling, regen logic, publish checklist).mam-main/includes/app-settings/admin-settings-page.php—imagefield type (do_image_field) and the left-menu/listings/forms image settings.
Re-verify whenever: the App Icon or Launch Screen panel is reorganized; the option keys (local-app-images-app-icon, local-app-app-icon-bg, ios_app_launch_screen_bg, mam_launch_screen_use_custom, local-app-images-launch-screen-2) change; the generated launch-screen dimensions (640×1136 / 1125×2436) change; the 4096×4096 source limit or the 1024×1024 icon minimum changes; or the in-app image setting variables (home_left_menu_top_image, has_left_menu_logo, listing_placeholder_image, avatar_placeholder) are renamed.
Related articles
- Publish Your App: submitting an iOS or Android build
- App Setting: home_left_menu_top_image
- App Setting: listing_placeholder_image
- App Setting: avatar_placeholder
