simslim

simslim

Runs far more iOS simulators by cutting background daemons

Description

Testing on a Mac with iOS simulators, the machine starts swapping and the fans spin up around the fifth or sixth one. The cause is not your app — a freshly booted simulator brings up roughly 180 background services: Siri, Spotlight indexing, photo analysis, News, wallpaper posters, iCloud sync and the rest. None of it matters for development or CI, and all of it consumes memory. simslim turns those off: on the same 16 GB M1 Pro, measured process count drops from 258 to 70 and memory from 4.0 GB to 0.9 GB, taking you from a handful of simulators to a screenful.

It is a Go command-line tool driving simulators through xcrun simctl, disabling launchd services by category — widgets and wallpaper, Siri and intelligence, Spotlight, iCloud, App Store and push, mail and calendar, Safari sync, Family and Screen Time — each annotated with roughly how much it saves. Keeping something is explicit: --except search preserves Spotlight, --keep com.apple.apsd preserves push.

The memory figure is phys_footprint, the number Activity Monitor shows including compressed and swapped pages, rather than a sum of ps RSS values — the README explains why the latter is not comparable. And status and measure answer different questions: the first reports the state of the launchd labels simslim manages and is not a live process count, while the second walks every process under that simulator and sums their footprints.

Alongside the CLI there is a SwiftUI macOS app that bundles it and adds searchable status, disk-size and live RAM columns. macOS only, requiring Xcode with an iOS Simulator runtime. MIT licensed.

Features



Category-based slimming: services a simulator does not need are grouped into widgets and wallpaper, Siri, Spotlight, iCloud, App Store and push, mail and calendar, Safari sync and Family, each switched off as a group with an estimated saving.

Selective retention: --except keeps a whole category and --keep keeps a specific launchd label, so testing push keeps apsd and testing search keeps Spotlight — it is not all or nothing.

Real memory measurement: measure walks every process under a simulator and sums phys_footprint, which is the figure that decides how many more fit, rather than an RSS total that double-counts shared mappings.

Live fleet monitoring: top shows a live view across simulators and drills into one for per-daemon RAM and CPU.

CI verification: verify --profile ci.json checks an exact profile match and exits non-zero on drift, which makes it usable in a pipeline, while doctor checks whether specific capabilities such as push, StoreKit or universal links still work.

Disk management: size reports allocation, disk-plan measures reclaimable data read-only, and disk-clean removes chosen categories such as caches and logs after confirmation.

Simulator management: clone, rename, boot, shut down, erase and delete, plus clone repair — a layer over the simctl operations you actually use.

Reversible: off restores a simulator to stock, and the project recommends cloning before changes so the copy serves as a backup.

JSON output: read-only and management commands accept --json for scripting and higher-level tooling.

Desktop app: the SwiftUI app bundles the CLI and adds searchable simulator status, disk size and live RAM columns along with per-daemon controls and purpose summaries.

Simple install: brew install mobai-app/tap/simslim or go install, macOS only, requiring Xcode with an iOS Simulator runtime.