
App Store Screenshots From the Simulator: Devices, Sizes, and a Capture Script
Which Xcode Simulator devices produce a screenshot App Store Connect accepts as is, a short script that tidies the status bar and saves numbered captures, and what gets a Simulator screenshot rejected.
On this page
To take App Store screenshots in the Simulator, run your app on the iPhone 18 Pro Max or iPhone 17 Pro Max simulator and save each screen with xcrun simctl io booted screenshot --type=jpeg. The file comes out at 1320 x 2868, which App Store Connect accepts for the 6.9-inch iPhone set without any resizing.
App Review judges a screenshot by its content, and a Simulator capture is your real build running real code, so it's as valid as a photo of the screen on a physical phone. The work is in picking a simulator whose screen size matches a slot Apple asks for, getting the status bar and demo data the same on every screen, and saving files without the alpha channel that a default PNG carries. We booted six simulators in Xcode 27.1 on October 19, 2026 and measured the files they produce, and every size below comes from those captures.
Simulators that match an App Store slot
An iPhone app's listing needs a set for the 6.3-inch slot, which App Store Connect now lists as required and fills by scaling if you upload a 6.9-inch set instead, and from April 2027 an iPhone Duo set as well. The 6.9-inch class in Apple's screenshot specifications accepts three portrait sizes, and three current simulators produce one of them to the pixel.
| Simulator (runtime) | Capture size | Where it goes |
|---|---|---|
| iPhone 18 Pro Max (iOS 27.0) | 1320 x 2868 | 6.9-inch set |
| iPhone 17 Pro Max (iOS 26.5) | 1320 x 2868 | 6.9-inch set |
| iPhone Air (iOS 26.5) | 1260 x 2736 | 6.9-inch set |
| iPhone 18 Pro (iOS 27.0) | 1206 x 2622 | 6.3-inch set, optional |
| iPhone 17 (iOS 27.0) | 1206 x 2622 | 6.3-inch set, optional |
| iPhone Duo (iOS 27.1) | 2007 x 2853 inner, 1398 x 2034 outer | iPhone Duo set, required from April 2027 |
Although the iPhone Air has a smaller screen than a Pro Max, its 1260 x 2736 capture is on Apple's list for the 6.9-inch class, so it works if that's the simulator you already have installed. The regular and Pro models land in the 6.3-inch class, the slot App Store Connect now marks as required, so their captures fill it directly, while a 6.9-inch set fills it by scaling. The iPhone 17 Pro Max size page lists the landscape sizes and the rest of the class. iPads follow the same logic with their own measurements, and the guide to iPad screenshots without an iPad lists which iPad simulators fill the 13-inch slot.
A capture script you can rerun
Typing the same three commands for every screen gets old by the second language. The zsh script below boots a simulator, freezes the status bar at 9:41 with full signal and battery, forces light mode, and then waits for you. Each time you press Return, it saves the current screen as the next numbered JPEG, and typing q ends the run.
#!/bin/zsh
DEVICE="iPhone 18 Pro Max"
OUT="captures/${DEVICE// /-}"
mkdir -p "$OUT"
xcrun simctl boot "$DEVICE" 2>/dev/null
xcrun simctl bootstatus "$DEVICE" -b > /dev/null
xcrun simctl status_bar "$DEVICE" override --time 9:41 --batteryState charged \
--batteryLevel 100 --wifiBars 3 --cellularBars 4 --operatorName ''
xcrun simctl ui "$DEVICE" appearance light
i=1
while read -r "key?Set up screen $i, then press Return (q to stop): " && [[ $key != q ]]; do
xcrun simctl io "$DEVICE" screenshot --type=jpeg "$OUT/$(printf %02d $i).jpg"
((i++))
done
Save it as capture.zsh, start your app on that simulator from Xcode, and run zsh capture.zsh in Terminal. Between captures you move to the next screen in the Simulator window, so the script never has to know how your app navigates. Our test run saved 1320 x 2868 JPEGs that sips reported with no alpha channel, which is why the script asks for JPEG rather than the default PNG. If simctl says the device name is ambiguous (two runtimes can each have an "iPhone 17 Pro Max"), replace the name with the UDID from xcrun simctl list devices. Change light to dark and run it again for a dark set, and use xcrun simctl status_bar "$DEVICE" clear when you want the real status bar back.
Stage the app before you press Return
The script records whatever is on screen, so set up each state first. Sign in to a demo account with a believable name, fill lists with real-looking content, and close any debug overlays, feature-flag banners, or "TestFlight" labels your app shows in development. The Simulator has a few controls that save you from building fake states by hand. xcrun simctl location booted set 40.7484,-73.9857 puts a maps or delivery app somewhere specific, and xcrun simctl push booted com.example.app payload.json delivers a notification you can capture on the Lock Screen. For other languages, launch the app with Foundation's language arguments instead of changing the simulator's settings:
xcrun simctl launch --terminate-running-process booted com.example.app -AppleLanguages "(de)" -AppleLocale de_DE
That relaunches your app in German while the rest of the simulator stays in English, so you can capture each locale back to back. Swap com.example.app for your bundle identifier.
Capturing both iPhone Duo screens
The iPhone Duo simulator has two displays, and a plain screenshot command saves only one of them. In our test it captured the inner display at 2007 x 2853. Run xcrun simctl io booted enumerate to list the screens, then pass the outer screen to --display; on our machine --display=1 saved the 1398 x 2034 outer screen. Apple's specifications list both sizes, and its iPhone Duo screenshots become required for submissions from April 2027. The iPhone Duo size page has the landscape sizes for each display.
When a Simulator screenshot gets rejected
One of the top results for this search is a Stack Overflow question from 2016, where a developer asks whether Simulator screenshots caused a metadata rejection. According to the review notes quoted there, the screenshots only showed the splash screen, so the problem was what they showed. App Review guideline 2.3.3 asks for screenshots of the app in use, and a splash screen photographed on a real iPhone would have drawn the same note. Two Simulator habits do cause trouble, though. A screen with placeholder text or lorem ipsum reads as unfinished, and a macOS window grab of the Simulator saves its gray device bezel along with the screen, which isn't a frame shoppers will recognize. Use the simctl command or File, then Save Screen, both of which save the display alone. If Apple has already sent you a message, the guide to rejected App Store screenshots matches each one to its fix.
From raw capture to finished slide
A whole capture folder can go through the free size checker at once, which is a quick way to catch a run where one file came from the wrong simulator. It works in the browser and names the display class for each file, though it won't resize a file that misses. Apple accepts raw captures as they are. Most listings add a headline and a background around each one, and the guide to making App Store screenshots walks through that assembly step by step. When you only need one capture inside an iPhone frame for a website or a launch post, the device mockup generator does that for free in the browser, and its output is meant for those places rather than for the store.
Generating a set from the captures
Screenies can start from the folder this script fills: it accepts PNG, JPEG, or WebP captures up to 10 MB each, along with a few sentences on what the app does, and returns a 1290 x 2796 iPhone set with headlines and slide order already planned. Pick Clean mode if you want every slide to show the staged screen exactly as captured, framed and not redrawn. The pricing page has the credit packs (an iPhone slide uses one credit), and you can start an iPhone set once the captures pass the checker.
FAQ
Does the iPhone 17 simulator work for App Store screenshots?
Its captures are 1206 x 2622, which fits the 6.3-inch class. App Store Connect now lists that slot as the required one, so a set captured on it is enough for the listing. Capture on a Pro Max or the iPhone Air instead if you want larger 6.9-inch files that App Store Connect scales down.
Why does my capture show the Apple logo or a blank screen?
The simulator hadn't finished starting, or your app wasn't in the foreground yet. Wait until the home screen appears, launch the app, and capture after the first screen has loaded its data.
Can I record an app preview video in the Simulator?
The command xcrun simctl io booted recordVideo preview.mov records the screen until you press Control-C. Apple's app preview specifications list their own resolutions and length limits, so the recording usually needs editing and exporting before it uploads.
Can I automate the whole capture across devices and languages?
fastlane snapshot runs your UI tests on a list of simulators and languages and saves a screenshot wherever the test calls snapshot("name"). It takes longer to set up than the script above, and it pays off once you're capturing more than one language. The fastlane screenshots guide covers the Snapfile, framing, and upload steps for current devices.
Is a Simulator screenshot sharper than one from my iPhone?
They're the same pixel size when the devices match, since both are the screen's full resolution. The Simulator's advantage is control over the status bar, appearance, location, and language without touching a phone you use every day.
Related guides

iPad Screenshots Without an iPad: Capture Them in Xcode Simulator
Boot the 13-inch iPad Pro in Xcode Simulator, tidy the status bar, and save captures that already match an accepted App Store size, with no iPad on your desk.

Google Play Screenshots: Counts, Sizes, and Content Rules
What Google Play needs in a store listing's screenshots, from the 2 to 8 image counts and the 2:1 aspect limit to the content rules on taglines, status bars, and claims, plus how it differs from an App Store set.

Fastlane Screenshots: snapshot, frameit, and deliver on Current iPhones and iPads
How to capture App Store screenshots with fastlane snapshot, frame them with frameit, and upload them with deliver, with the simulator names, sizes, and frame gaps that apply to fastlane 2.241.2.