If you’ve ever taken a screenshot in the Simulator and noticed the ugly 10:47 and 43% battery in the corner, this is the fix:

xcrun simctl status_bar <udid> override --time 9:41 --batteryLevel 100 --cellularBars 4

That gives you the same status bar Apple uses in every piece of marketing they’ve ever shipped.

Getting the UDID

xcrun simctl list devices

Or skip it entirely and use the booted keyword, which targets whatever simulator is currently running:

xcrun simctl status_bar booted override --time 9:41 --batteryLevel 100

The device has to actually be booted for the override to apply.

All the flags

Flag Values
--time Any string. A valid ISO date string will also set the date.
--dataNetwork hide, wifi, 3g, 4g, lte, lte-a, lte+, 5g, 5g+, 5g-uwb, 5g-uc
--wifiMode searching, failed, active
--wifiBars 03
--cellularMode notSupported, searching, failed, active
--cellularBars 04
--operatorName Any string — set your own fake carrier
--batteryState charging, charged, discharging
--batteryLevel 0100

Available options vary a little by Xcode version, so xcrun simctl status_bar --help is the source of truth on your machine.

Listing and clearing

xcrun simctl status_bar booted list
xcrun simctl status_bar booted clear

Why 9:41?

It’s Apple’s canonical demo time. Steve Jobs unveiled the original iPhone roughly 41 minutes into the January 2007 keynote, and the marketing screenshots were set to match so the on-screen device agreed with the one in his hand. It stuck, and every iOS device in Apple’s marketing has read 9:41 ever since. Macs use 9:41 too; the Apple Watch uses 10:09.

Gotchas

  • Overrides are per-device. Set them on each simulator you’re capturing from.
  • Erasing the device wipes them. simctl erase clears overrides along with everything else.
  • --time accepts arbitrary strings. Handy for locale-specific screenshots — --time "09:41" vs --time "9:41 AM".
  • Battery sometimes needs both flags. If the level doesn’t visibly change, add --batteryState discharging alongside --batteryLevel.
  • The override wins over the real clock, so the status bar will sit frozen at whatever you set until you clear it.

Shell helper

Worth dropping in your .zshrc if you take screenshots regularly:

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

Then just run prettybar before you hit ⌘S. If you’re automating App Store screenshots with fastlane, run the same command in a before_all block so every capture comes out consistent.