Conform iOS Simulator to Apple Marketing Guidelines

Apple says:

The status bar for iPhone, iPad, and iPod touch should show a full network icon or product designator, a full Wi-Fi icon, and a full battery icon. Don’t show the name or identity of a carrier.

Apple Marketing Guidelines

But by default Simulator shows an unconnected cellular network icon:

So I run this script before making the screenshots for the App Store:

xcrun simctl status_bar booted override --dataNetwork wifi --wifiBars 3 --cellularBars 4 --operatorName '' --batteryState discharging --batteryLevel 100

Voila.

Wonder why this is not the default… Hat tip to Jeff Kelley’s Blog.

Update 18. September:

With Xcode 13 it seems one more option is needed for operatorName to be respected. Can you spot the difference?

xcrun simctl status_bar booted override --dataNetwork wifi --wifiBars 3 --cellularMode 'active' --cellularBars 4 --operatorName '' --batteryState discharging --batteryLevel 100 --time 10:12

In back-to-back test I could not reproduce the failure of the old set of options, so maybe I’m had something mixed up? I don’t know. Anyway, it doesn’t hurt to have more options than bare minimum.

Since my apps display some time strings (like last HealthKit sync) it’s best to also set the system clock to that time. You could do that in the Settings app, but I like to do it in Terminal as well.:

sudo date 0918094121

Yes, you need to give it your password and the date / time is in a weird format. It’s {month}{day}{hour}{minute}{year}.

And another thing: if your Xcode application file is not named /Applications/Xcode.app but something like /Applications/Xcode\ GM.app you might run into this error, like I did today:

An error was encountered processing the command (domain=NSPOSIXErrorDomain, code=1): Status bar overrides not supported on this platform. Operation not permitted

Now you know what to do to fix this: rename the app file like Apple intended.