iPhone screenshots,
per device.
One screenshot size is required for App Store Connect: 1290×2796, the iPhone 6.9″ master. Three more are optional. If you only have time for one, render it at 1290×2796 and let Apple handle the rest, but here's the full list, the actual device the size maps to, and how to capture at native resolution.
The required size
Since iOS 18 (and reaffirmed in iOS 19), App Store Connect requires one iPhone screenshot size for new submissions: 1290×2796 portrait, the native resolution of the iPhone 16 Pro Max display class. Every other iPhone size is derived from this master via Apple's bicubic downsampling.
Required for every iPhone listing
Must ship| Class | Portrait | Landscape | Maps to |
|---|---|---|---|
| iPhone 6.9″ | 1290 × 2796 | 2796 × 1290 | 16 Pro Max, 15 Pro Max, 14 Pro Max |
Optional sizes (still accepted)
Apple still accepts older iPhone screenshot sizes if you want pixel-precise control on those displays. If you skip them, the App Store auto-generates them from your 6.9″ master. Most apps shouldn't bother, the auto-scaled versions are visually identical at carousel resolution.
Optional
Auto-scaled if omitted| Class | Portrait | Maps to |
|---|---|---|
| iPhone 6.5″ | 1242 × 2688 | XS Max, 11 Pro Max |
| iPhone 6.5″ (alt) | 1284 × 2778 | 12 Pro Max, 13 Pro Max |
| iPhone 5.5″ | 1242 × 2208 | 8 Plus, 7 Plus, 6s Plus |
The iPhone 4″ size (640×1136, original SE) is no longer accepted for new submissions. App Store Connect will reject it. If your old binary has 4″ screenshots, leave them but don't upload new ones at that size.
Capturing at native resolution
The biggest source of size errors isn't the spec, it's that simulator screenshots default to logical points, not retina pixels. A "1290×2796" capture from your simulator is usually 430×932 unless you explicitly request native scale.
From the Xcode simulator
Boot the simulator at the 6.9″ device class (Hardware → Device → iOS 19 → iPhone 16 Pro Max), then capture with:
xcrun simctl io booted screenshot --type=png ./screenshot.png
This grabs the raw framebuffer, which is at native retina resolution. Cmd+S in the simulator UI also works, but it routes through window scaling, use the CLI for anything you'll upload.
From a real device
iPhone screenshots taken on the device (Side button + Volume Up) are at the device's actual screen resolution, which is what Apple wants. The catch: iOS 18+ adds an HDR color profile to screenshots. Strip it before upload using sips -m sRGB.icc screenshot.png, or App Store Connect quietly converts it for you (sometimes badly).
From Mockstack
If you're using the screenshot editor, upload your raw screenshot at any resolution, the canvas renders at the target size, not the source. The phone frame and background are vector; only your screenshot is sampled. Native-resolution captures are still preferable because they downsample more cleanly than upsample.
Layout considerations per device
Dynamic Island (Pro models)
The 1290×2796 master is a Pro display, meaning the status bar wraps around a Dynamic Island. If your app shows the status bar in screenshots, render with the Island present, Apple's auto-scaler will still produce correct non-Pro derivatives. Mockstack's iPhone Pro frame includes the Island in the correct position.
Notch (non-Pro models)
If you're targeting users on iPhone 14/15 base models specifically, render at 6.5″ size (1284×2778) with a notch frame. Otherwise the Island shows up in the auto-scaled derivative and reads slightly off.
Safe area
The bottom 64 points (~133 pixels at @3x) are home-indicator territory. Don't put critical content there. If you're cropping out the home indicator entirely (common for marketing), crop after rendering at full size, not before.
Status bar hygiene
Reviewers won't reject a messy status bar, but users notice one: 3% battery, no signal, 2:47 AM. Apple's own marketing shots use a standardized status bar, and yours should too. The simulator can set it directly:
xcrun simctl status_bar booted override --time "9:41" --batteryState charged --batteryLevel 100 --cellularBars 4 --operatorName ""
That gives you Apple's traditional 9:41, a full battery, and full signal on every capture. On a physical device, the closest equivalents are capturing in the morning with the battery topped up, or compositing your screenshot into a frame that draws its own clean chrome, which is what a screenshot tool's device frames do anyway. Two details worth the extra minute: turn off notification previews before capturing (a banner mid-shot is forever), and check that the capture locale's time format matches the listing locale, a 24-hour clock in a US listing is a small tell.
Common mistakes
Letterboxing a 5.5″ screenshot into a 6.9″ canvas
Padding a 1242×2208 capture inside a 1290×2796 canvas produces a screenshot with horizontal black bars. App Store Connect detects the empty pixels and rejects it. Render fresh at every target size, or just submit the 6.9″ and let Apple downsample.
Including the status bar with the wrong battery state
A screenshot with 47% battery in the status bar reads as "this app probably drains battery." For marketing, override the status bar to show 9:41 AM (Apple's traditional demo time), full battery, full signal. The simulator does this automatically with xcrun simctl status_bar override.
Localizing the wrong size
Screenshots are per-locale, and Apple will accept different art per locale. The size requirement is the same in every locale, 1290×2796 for iPhone. Don't try to ship a "compact German" version at 1242×2688; just translate the content and re-render at the master size.
Quick reference
- Minimum to ship: 1290 × 2796 portrait, PNG, sRGB.
- Max per locale: 10 screenshots.
- Status bar time: 9:41 AM (Apple convention since 2007).
- Don't ship at: 4″ (640×1136), 3.5″, anything pre-iPhone 6.
- Capture command:
xcrun simctl io booted screenshot --type=png.
One size required, three optional, capture at native resolution. The rest is content.