Xcode 11 shipped with
simctl status_bar, a tool to override the status bar values in the simulator so you can take perfect screenshots. I’ve written about this tool before here, here, and here. Unfortunately,
simctl status_bar is broken in Xcode 14 with the iOS 16 simulators.
I noticed this bug in Xcode 14 when attempting to use my utility, Nine41 to prepare for taking screenshots for an app. The tool ran without reporting any issues, yet the status bars in the simulator did not update. I thought something might have changed in Xcode 14, so I invoked
simctl status_bar manually — still nothing happened. As an extra sanity check, I also tried using Sim Genie, which also failed.
This is a new regression with Xcode 14, but it only affects the iOS 16 simulators. I tested again with yesterday’s release of Xcode 14.2 and the issue has not been fixed. If you run your app using the iOS 15 or earlier simulators, then
simctl status_bar (and Nine41) will work correctly. I have no idea what caused the regression, but perhaps it has something to do with the Dynamic Island on iOS 16?
Luckily, you do not have to open Xcode 13 just to take screenshots. However, if your app’s minimum deployment target is iOS 16, then you currently have no choice but to take screenshots with ugly status bars.
Update 14 December 2022
Thanks to reader Neil Macy for letting me know that it is actually only the iOS 16.1 and 16.2 simulators that are broken. I’ve confirmed that using the iOS 16.0 simulator does work! This means you can still take perfect screenshots with a minimum deployment target of iOS 16. However, you will need to work around any features that are only available on 16.1 or 16.2 until this is fixed. This confirms my suspicion that the regression is related to the Dynamic Island — or at least the new devices released this fall.