Guide · Verified 2026
Clean status bar screenshots
Ten store screenshots with ten different times, battery levels, and a half-empty signal bar read as careless before anyone has looked at your app. Both platforms let you pin the status bar to a fixed, tidy state before you capture. Here are the commands that currently work.
iOS Simulator — one command
Boot the simulator you want to shoot on, then override its status bar. booted targets whichever simulator is currently running.
xcrun simctl status_bar booted override \
--time "9:41" \
--batteryState charged \
--batteryLevel 100 \
--cellularMode active \
--cellularBars 4 \
--wifiMode active \
--wifiBars 3 \
--operatorName ""The override sticks until you clear it or shut the device down:
xcrun simctl status_bar booted list # what's applied right now
xcrun simctl status_bar booted clear # back to normalYou no longer need a third-party tool for this. Most of the guides still ranking for this question were written for Xcode 11 and predate several of the flags below, and SimulatorStatusMagic solved a problem the platform now solves itself.
Every flag, and what it takes
Read from xcrun simctl status_bar directly. At least one flag is required; combine as many as you like.
| Flag | Accepted values | Notes |
|---|---|---|
| --time | string | A fixed time. An ISO date string also sets the date. |
| --dataNetwork | hide · wifi · 3g · 4g · lte · lte-a · lte+ · 5g · 5g+ · 5g-uwb · 5g-uc | Which data indicator shows. |
| --wifiMode | searching · failed · active | Set to active for a clean shot. |
| --wifiBars | 0–3 | 3 is full. |
| --cellularMode | notSupported · searching · failed · active | notSupported hides cellular entirely. |
| --cellularBars | 0–4 | 4 is full. |
| --operatorName | string | Pass '' to blank the carrier name. |
| --batteryState | charging · charged · discharging | charged avoids a charging bolt. |
| --batteryLevel | 0–100 | 100 for a full battery. |
Android — SystemUI demo mode
Android’s equivalent is a broadcast interface, and unlike iOS it works on physical hardware as well as the emulator. Allow it once per device, then drive it per shot.
adb shell settings put global sysui_demo_allowed 1
adb shell am broadcast -a com.android.systemui.demo -e command enter
adb shell am broadcast -a com.android.systemui.demo -e command clock -e hhmm 1231
adb shell am broadcast -a com.android.systemui.demo -e command battery -e level 100 -e plugged false
adb shell am broadcast -a com.android.systemui.demo -e command network -e wifi show -e level 4
adb shell am broadcast -a com.android.systemui.demo -e command network -e mobile show -e datatype none -e level 4
adb shell am broadcast -a com.android.systemui.demo -e command notifications -e visible false
adb shell am broadcast -a com.android.systemui.demo -e command exitnotifications visible false is the one most people miss, and it is the one that matters most — a stray notification icon is the detail that makes a screenshot look like a snapshot rather than a product shot.
What you can’t do on a physical iPhone
Nothing. There is no supported override for a real device’s status bar — simctl speaks to the Simulator only. If the screen you need genuinely cannot be captured in the Simulator, retouching the bar in an image editor is the only honest route. Plan for that: shoot the Simulator wherever you can, and keep the hardware-only shots to a minimum.
Then frame it
A clean bar is the raw material, not the finished shot. Drop the capture onto a real 3D phone, angle it, light it, and export a 4K PNG — free, no signup, no watermark, and the image never leaves your browser. The two pages either side of this one are why listings get rejected and the sizes to export at.
Questions that come up
- How do I set a clean status bar in the iOS Simulator?
- Boot the simulator, then run: xcrun simctl status_bar booted override --time "9:41" --batteryState charged --batteryLevel 100 --cellularMode active --cellularBars 4 --wifiMode active --wifiBars 3 --operatorName "". The override persists until you run xcrun simctl status_bar booted clear or shut the device down. You can check what is currently applied with xcrun simctl status_bar booted list.
- Can I clean the status bar on a real iPhone?
- No. There is no supported way to override the status bar on a physical device — simctl talks to the Simulator only. Your options are to capture on the Simulator instead, or to retouch the bar afterwards in an image editor. If your screenshot has to come from real hardware because it shows something the Simulator cannot do, such as a camera feed, retouching is the only route.
- Does Apple require the status bar to say 9:41 with a full battery?
- No. No App Review guideline mandates a time, a battery level, a signal strength, or the absence of a carrier name in screenshots. 9:41 is an Apple marketing convention, not a rule. Cleaning the bar is still worth doing because ten screenshots with ten different times and battery levels look careless, but a rejection blamed on the status bar is a rejection about something else — usually guideline 2.3.10.
- How do I do the same thing on Android?
- Android uses SystemUI demo mode over adb. Allow it once with adb shell settings put global sysui_demo_allowed 1, enter it with adb shell am broadcast -a com.android.systemui.demo -e command enter, then send clock, battery, network, and notifications commands, and leave with the exit command. It works on physical Android devices as well as emulators, which is one thing Android does better than iOS here.