What problem does it solve?
It eliminates inconsistent iOS Simulator behavior by providing a repeatable command-line workflow to manage simulator devices, deploy the app, simulate runtime inputs (push, location), and capture deterministic debugging artifacts.
Core Features & Use Cases
- Device lifecycle management: Create, boot, erase, and delete simulators with clean setup/teardown patterns to prevent CI flakiness.
- App install, launch, and introspection: Install a built simulator .app, launch with arguments or console output, terminate runs, and inspect sandbox containers via
get_app_container.
- Runtime simulation for QA and debugging: Simulate local push payload delivery, spoof GPS locations, grant/revoke privacy permissions, and trigger deep links/universal links via
openurl.
- Deterministic media and logs: Capture screenshots and screen recordings with bezel-masking options, stream logs with
log stream using subsystem/category filtering, and debug boot failures.
- Simulator-aware code paths: Use compile-time simulator checks (
#if targetEnvironment(simulator)) to avoid calling APIs unavailable in Simulator.
Quick Start
Start by listing available simulators with xcrun simctl list devices available, pick a device runtime, then create and boot a fresh device before installing and launching your app.