Workflow

How to Get a Clean 9:41 Status Bar in App Screenshots

Why Apple marketing shows 9:41, how to get a clean status bar with the Simulator's simctl, Android demo mode, or by replacing it after the fact.

Updated 5 min read

For a clean 9:41 status bar on iOS, run xcrun simctl status_bar booted override on the Simulator before you capture; on Android, use System UI demo mode via adb. If your screenshots are already taken, replace the status bar afterwards. Either way you get a full battery, full signal, no notification icons and the same time on every frame.

Why Apple shows 9:41

Apple’s product images show 9:41 because the original iPhone was unveiled at roughly that time in Steve Jobs’s keynote on 9 January 2007. Apple has kept it since, and most polished App Store screenshots follow suit. Nothing in Apple’s rules requires it — but a mixed bag of 14:07, 23% battery and one bar of signal makes a set look unfinished, and carrier names or notification icons can reveal more than you intended.

On Android there is no equally iconic time; pick a neutral one and use it on every screenshot.

iOS Simulator: simctl status_bar

Since Xcode 11, the Simulator’s status bar can be overridden from the command line. Boot the simulator you want to capture, then run:

xcrun simctl status_bar booted override \
  --time "9:41" \
  --dataNetwork wifi \
  --wifiMode active \
  --wifiBars 3 \
  --cellularMode active \
  --cellularBars 4 \
  --batteryState charged \
  --batteryLevel 100

Reset it when you’re done:

xcrun simctl status_bar booted clear
Run xcrun simctl status_bar --help for the options supported by your Xcode version.
OptionValuesNotes
--timeAny string, e.g. "9:41"Shown as the clock
--dataNetworkhide, wifi, 3g, 4g, lte, lte-a, lte+, 5g, 5g+, 5g-uwb, 5g-ucNetwork type indicator
--wifiMode / --wifiBarssearching, failed, active / 0–3Use active and 3 for full Wi-Fi
--cellularMode / --cellularBarsnotSupported, searching, failed, active / 0–4Use active and 4 for full signal
--operatorNameAny stringPass an empty string to hide the carrier name
--batteryState / --batteryLevelcharging, charged, discharging / 0–100charged + 100 shows a full battery

All booted simulators at once

booted targets one booted device. If you capture iPhone and iPad side by side, loop over every booted simulator:

for udid in $(xcrun simctl list devices booted | grep -Eo '[0-9A-F-]{36}'); do
  xcrun simctl status_bar "$udid" override --time "9:41" \
    --dataNetwork wifi --wifiMode active --wifiBars 3 \
    --cellularMode active --cellularBars 4 \
    --batteryState charged --batteryLevel 100
done
Capture at the right size
Take screenshots on the simulators that match the required display classes — 6.3″ iPhone (1206 × 2622) and 13″ iPad (2064 × 2752) — so you don’t have to rescale later. The screenshot sizes guide lists every class. Re-run the override if you restart a simulator.

fastlane snapshot and screengrab

If you automate captures with fastlane, let it handle the status bar. For iOS, add this to your Snapfile:

# Snapfile
devices(["iPhone 17 Pro", "iPad Pro 13-inch (M4)"])
languages(["en-US", "de-DE"])

# Clean status bar: 9:41, full battery and signal
override_status_bar(true)

# Optional: your own simctl options instead of the defaults
# override_status_bar_arguments("--time 9:41 --dataNetwork wifi --wifiMode active --wifiBars 3 --batteryState charged --batteryLevel 100")

Use the simulator names installed on your machine (xcrun simctl list devicetypes). On Android, fastlane screengrab ships a helper that drives demo mode from your instrumentation tests:

import tools.fastlane.screengrab.cleanstatusbar.CleanStatusBar;

@BeforeClass
public static void beforeAll() {
    CleanStatusBar.enableWithDefaults();
}

@AfterClass
public static void afterAll() {
    CleanStatusBar.disable();
}

Once captured and designed, the fastlane deliver and supply guide covers uploading.

Android: System UI demo mode

Android’s System UI has a built-in demo mode for exactly this purpose. It works on emulators and real devices over adb. First allow it (once per device), then enter demo mode and set each element:

# allow demo mode
adb shell settings put global sysui_demo_allowed 1

# enter demo mode
adb shell am broadcast -a com.android.systemui.demo -e command enter

# clock (hhmm)
adb shell am broadcast -a com.android.systemui.demo -e command clock -e hhmm 0941

# full battery, not charging
adb shell am broadcast -a com.android.systemui.demo -e command battery -e level 100 -e plugged false

# full Wi-Fi; optionally full mobile signal without a data type
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

# hide notification icons
adb shell am broadcast -a com.android.systemui.demo -e command notifications -e visible false

Leave demo mode when you’re done:

adb shell am broadcast -a com.android.systemui.demo -e command exit
  • With several devices connected, add -s <serial> after adb.
  • Many builds also expose a System UI demo mode switch in Developer options, which applies a default clean state without adb.
  • Manufacturer skins can ignore some demo commands. If an element doesn’t change, use an emulator with a stock image for captures.

Screenshots from a real device

On a physical iPhone there is no status bar override. You can get close by charging to 100%, connecting to Wi-Fi, enabling Do Not Disturb so no notifications appear, and turning off Set Automatically under Settings › General › Date & Time to set the clock to 9:41 — but it’s fiddly, and the minute will change while you work. For anything more than a few screenshots, capture on the Simulator or fix the status bar afterwards.

Fixing existing screenshots

If your screenshots come from a designer, a teammate’s phone or an old release, replacing the status bar is often faster than recapturing. Paint a solid strip matching the app’s top background over the original bar, then draw a new clock, signal, Wi-Fi and battery. Things to watch:

  • Match the device generation. Dynamic Island iPhones place the clock and icons on either side of the island; older notch and home-button iPhones use different layouts and heights.
  • Match the appearance. Dark text on light screens, light text on dark screens.
  • Keep the exact pixel size of the original image — App Store Connect rejects anything that isn’t an accepted size.
  • Watch gradients and images behind the status bar; a flat strip over a photo header is obvious.

With our tools

Our clean status bar tool paints a 9:41 iOS status bar or a clean Android one over existing screenshots, in batches, directly in your browser — nothing is uploaded. Put the results into device mockups or straight into the editor, and verify the final sizes with the screenshot checker. For new captures, the simctl and demo mode commands above are still the cleanest source.

Frequently asked questions

Why is the time always 9:41 in Apple product images?

The original iPhone was revealed at about 9:41 a.m. during Steve Jobs’s January 2007 keynote, and Apple has kept that time in its marketing images ever since. Using 9:41 makes your screenshots look consistent with Apple’s own.

How do I set the iOS Simulator status bar to 9:41?

Run xcrun simctl status_bar booted override --time "9:41" together with options for full battery and signal, such as --batteryState charged --batteryLevel 100 --wifiBars 3 --cellularBars 4. Run xcrun simctl status_bar booted clear to undo it.

How do I get a clean status bar on Android?

Use System UI demo mode: allow it with adb shell settings put global sysui_demo_allowed 1, enter it with a com.android.systemui.demo broadcast, then send clock, battery, network and notifications commands. Exit with the exit command.

Is a clean status bar required for App Store screenshots?

No, Apple doesn’t require it. It is a polish step that removes distractions such as low battery, odd times, carrier names and notification icons that can also leak personal information.

Can I fix the status bar on screenshots I already took?

Yes. You can paint a clean status bar over the existing one in an image editor, or use a batch tool such as our clean status bar tool, which replaces it with a 9:41 iOS or a clean Android bar in the browser.

Does fastlane snapshot clean the status bar?

Yes. Set override_status_bar to true in your Snapfile and snapshot applies a clean status bar on the simulators before capturing. override_status_bar_arguments lets you pass your own simctl options.

Related guides

Make your store screenshots now — free

Templates, device mockups, AI translation and exact-size export for both stores. No account, no watermark.