iOS Simulators
Boot, stop, and reset iOS Simulators directly from the VSCode sidebar. SweetPad drives xcrun simctl โ the same tool
Xcode's Devices and Simulators window uses behind the scenes.
What you can doโ
- ๐ Boot โ click โถ๏ธ next to a simulator to boot it.
- ๐ Stop โ click โน to shut it down.
- ๐ฑ Open Simulator.app โ click ๐ฑ at the top of the Simulators panel to open the Simulator window.
- ๐ Refresh โ click โป to re-read the installed simulators list.
- ๐งน Remove simulator cache โ clears the simulator cache; useful when boot starts to misbehave (see Troubleshooting).
If something's missing, open a discussion or issue on the SweetPad GitHub repository.
Keep the Simulator app in the backgroundโ
By default, launching the app brings the Simulator window to the foreground every time. If you'd rather stay in VSCode โ typical when iterating quickly, doing hot-reload work, or using keyboard automation to drive the Simulator โ turn that off:
{
"sweetpad.build.bringSimulatorToForeground": false
}
The Simulator still boots and runs the app; only the focus-stealing window activation is suppressed.
Logs from the simulatorโ
os_log, Logger, print, and NSLog output from your simulator-running app is streamed into the build terminal
alongside compiler output โ no separate Console.app required. For Simulator runs the stream is implemented as
xcrun simctl spawn <udid> log stream --predicate <โฆ> --level debug --style ndjson; for macOS runs SweetPad
invokes the host log stream with the same flags. The filtering knobs Apple's log tool accepts work in both
cases.
Turn the stream offโ
{
"sweetpad.build.logStreamEnabled": false
}
Customize the predicateโ
By default the predicate matches by process image (process + sender) rather than by subsystem, so apps that don't
use Logger(subsystem:) still surface and Apple framework chatter stays out. Override the whole predicate with
sweetpad.build.logStreamPredicate when you need finer control โ for example to keep only a specific subsystem, or
to widen the filter to a framework you're debugging:
{
"sweetpad.build.logStreamPredicate": "processImagePath CONTAINS '${processName}'"
}
${bundleId} and ${processName} are substituted with the running app's bundle identifier and CFBundleExecutable
before the predicate is passed to log stream.
logStreamPredicate and logStreamEnabled apply to simulators and macOS runs (anything launched via log stream). Physical iOS devices stream through pymobiledevice3 and use a different filtering model โ see
Devices โ Filter what reaches the terminal.
Troubleshootingโ
If booting fails with
Failed to start launchd_sim: could not bind to session, launchd_sim may have crashed or stopped responding, click
Remove simulator cache in the Simulators panel and try again.