ScreenShipper
Blog
Tools & Workflow

Clean Status Bar for Screenshots: 9:41, Full Battery and Signal

Get a clean status bar in the iOS simulator and Android emulator for screenshots, with 9:41, full battery and full signal via simctl and Android demo mode.

ScreenShipper team · · 6 min read

Quick answer: On iOS, run xcrun simctl status_bar booted override --time 9:41 --batteryState charged --batteryLevel 100 --cellularMode active --cellularBars 4 --wifiBars 3, take your screenshots, then reset with xcrun simctl status_bar booted clear. On Android, allow demo mode with adb shell settings put global sysui_demo_allowed 1, then send com.android.systemui.demo broadcasts to fix the clock, battery and signal.

Why a Clean Status Bar Matters in Store Screenshots

The status bar is a few dozen pixels tall, but shoppers notice when it's wrong: 23% battery, a 2:17 a.m. clock, a carrier name, a row of notification icons. It makes the screenshot look like a hurried phone grab instead of a product page.

A clean status bar does three things:

  • Removes distractions so the eye goes to your UI and headline.
  • Keeps the set consistent. Every screenshot, device and language shows the same time and full bars.
  • Matches Apple's own presentation. Apple's App Store marketing guidelines ask for a full network icon, full Wi-Fi icon and full battery icon when you show your app on Apple devices in marketing.

Why 9:41? It's the time Apple shows on its own iPhone and iPad product images, and app makers adopted it as the convention. Any neat time works, but 9:41 instantly reads as "official."

iOS Simulator: Override the Status Bar with simctl

The simctl status_bar command changes what the simulator shows without touching your app. Use it with any simulator, including those in Xcode 27's Device Hub.

  1. Run your app on the simulator so it's booted.
  2. Apply the override: xcrun simctl status_bar booted override --time 9:41 --batteryState charged --batteryLevel 100 --cellularMode active --cellularBars 4 --wifiBars 3.
  3. Capture your screens with xcrun simctl io booted screenshot 01-home.png (or the Screenshot button).
  4. Remove the override when you're done: xcrun simctl status_bar booted clear.

These are the flags you'll use most:

FlagWhat it setsTypical value
--timeClock text; an ISO 8601 date-time also sets the date on devices that show one9:41
--batteryStatecharging, charged or dischargingcharged
--batteryLevelBattery percentage, 0 to 100100
--cellularModenotSupported, searching, failed or activeactive
--cellularBarsSignal bars, 0 to 44
--wifiBarsWi-Fi bars, 0 to 33
--wifiModesearching, failed or activeactive
--dataNetworkNetwork label such as wifi, lte, 5g or hidewifi
--operatorNameCarrier text; pass '' for none''

Tips that prevent re-shoots:

  • If more than one simulator is booted, booted picks just one. Run the override for each device by UDID; xcrun simctl list devices booted shows the IDs.
  • If the status bar reverts, for example after the simulator restarts, run the override again.
  • If you'd rather not show a charging bolt, try --batteryState discharging with --batteryLevel 100.
  • xcrun simctl help status_bar prints the values your Xcode version accepts.

Using fastlane? Its snapshot action can apply the same override for every device in a run; see our fastlane snapshot guide.

Android Emulator: Clean Status Bar with Demo Mode

Android's System UI has a built-in demo mode that freezes the clock, battery and signal icons. You control it with adb broadcasts. Run these in order:

  1. Allow demo mode: adb shell settings put global sysui_demo_allowed 1
  2. Enter it: adb shell am broadcast -a com.android.systemui.demo -e command enter
  3. Set the clock: adb shell am broadcast -a com.android.systemui.demo -e command clock -e hhmm 1200
  4. Full battery, not charging: adb shell am broadcast -a com.android.systemui.demo -e command battery -e level 100 -e plugged false
  5. Full Wi-Fi: adb shell am broadcast -a com.android.systemui.demo -e command network -e wifi show -e level 4
  6. Full mobile signal with no data label: adb shell am broadcast -a com.android.systemui.demo -e command network -e mobile show -e datatype none -e level 4
  7. Hide notification icons: adb shell am broadcast -a com.android.systemui.demo -e command notifications -e visible false
  8. Capture: adb exec-out screencap -p > screen.png
  9. Leave demo mode: adb shell am broadcast -a com.android.systemui.demo -e command exit

The hhmm value is always four digits, so 0941 gives you 9:41 if you want the same time as your iOS set. Wi-Fi and mobile levels go from 0 to 4. With several devices attached, add -s and the serial from adb devices, for example adb -s emulator-5554 shell ....

Demo mode is part of Android's System UI, so it works on emulator images and on most physical devices with USB debugging. Manufacturer skins can handle some icons differently, so check the first capture before you shoot the full set. Our Android emulator screenshot guide covers capture and Google Play sizes.

Physical Devices and Other Options

  • iPhone hardware: simctl only controls simulators. On a real iPhone, charge to 100%, connect to Wi-Fi, turn on Do Not Disturb, and capture at a moment the clock looks tidy. For most screens, the simulator is simply faster.
  • Hiding the status bar entirely: neither tool removes it. If your design crops the top of the screen or uses a frameless layout, make sure every screenshot is cropped the same way.
  • Full-screen apps and games: if your app hides the status bar itself, you don't need any of this.

Status Bar Checklist Before You Capture

CheckiOSAndroid
Same time on every screenshot--time 9:41-e hhmm 0941 or 1200
Full battery--batteryLevel 100-e level 100 -e plugged false
Full signal--cellularBars 4 --wifiBars 3-e level 4 for wifi and mobile
No carrier name--operatorName ''Not usually shown in the status bar
No notification iconsiOS doesn't show them in the status bar-e command notifications -e visible false
Reset afterwardstatus_bar booted clear-e command exit

Then run a quick visual pass on the full set: same appearance (light or dark) as the design, no stray alarm or location icons, and the same status bar on iPhone, iPad and Android. These small details are on our screenshot mistakes list for a reason, and they're part of the pre-upload checklist.

Frequently Asked Questions

Why do iPhone screenshots always show 9:41?

It's the time Apple shows on its own iPhone and iPad product images, often traced to the timing of its keynote reveals. It isn't a store requirement, but it has become the standard for a polished, consistent look.

Does Apple reject screenshots with a messy status bar?

There is no review rule that requires 9:41 or full bars. A clean status bar is about polish and consistency, while App Review focuses on whether screenshots accurately show your app.

Can I set a 24-hour time like 09:41?

Yes. On iOS, --time accepts any text, so --time 09:41 shows exactly that. On Android, demo mode follows the emulator's 12- or 24-hour setting for the hhmm value you pass.

Does the simctl override change my app's code?

No. It only changes what the simulator's status bar displays. Your app and its build settings stay untouched, and xcrun simctl status_bar booted clear restores the live values.

Can I use demo mode in automated Android screenshot tests?

Yes. Run the same adb broadcasts before your test suite starts and the exit command afterward. Tools such as fastlane screengrab are covered in our fastlane screengrab guide.

Sources

From raw captures to store-ready screenshots

Drop your simulator or emulator captures into a template and export every store size, or frame a single screen with the free mockup generator.

All guides