v2.1.0
v2.1.0
The first stable release on the 2.1 line, built up over nine betas and
three release candidates. If you have been on the stable channel since v2.0.1,
everything below is new to you.
On first launch the privileged helper reinstalls itself — one admin prompt,
then a restart. This applies to RC users too; see Upgrade notes.
Highlights
- Multi-tab content navigation with a window tab bar and per-tab history
- Generic type specialization — inspect Swift generics with concrete arguments filled in
- Background indexing — the sidebar is ready when you click into it
- Inspector → Relationships — a class's subclasses, a protocol's conforming types
- Batch export interfaces for multiple images in one pass
- Theme settings with a built-in Xcode preset
- Jump to Definition for Swift type references
- Line numbers in the content view
- Injection into strict-seatbelt daemons and Apple applications
- iOS Simulator runtime installer built in
What's new
Runtime inspection
Generic Type Specialization — pick a Swift generic from the sidebar and the
new Specialize… sheet lets you fill in its type parameters; the Inspector
then renders the fully specialized interface alongside the original. Nested
generics can be drilled into in the same sheet, and arguments may come from a
different binary than the generic itself.
Inspector → Relationships — a new tab between Hierarchy and
Specialization. Select a class to list its direct subclasses; select a
protocol to list the types conforming to it. Results are gathered across every
indexed image, not just the one defining the type, so matches in other binaries
show up too — and the list fills in as background indexing catches up. Covers
Objective-C and Swift classes and protocols.
Jump to Definition for Swift types — Command-click a Swift type reference
in the content view to navigate to its definition, as you already could for
Objective-C.
Enum layout fixed-bit masks — the Swift enum-layout view now shows the exact
bit pattern the runtime uses to discriminate each case.
Indexing & batch operations
Background Indexing — RuntimeViewer walks the dylib dependency graph after a
document opens and indexes related binaries in the background, so they are ready
by the time you click into them. A toolbar popover shows what is indexing, lets
you cancel individual batches, and keeps a history; selecting a queued binary
bumps it to the front.
Settings → Indexing — a new page with a master switch and two independent
modes: Heuristic Discovery (dependency BFS from the main executable,
configurable depth 1–5) and Always Index (a list of pinned images, each able
to follow its own dependencies).
Batch Export — File → Export Multiple Images… exports the interfaces of
many images in one pass. Format choices are remembered across runs, and the
completion summary lists each failure individually so you can re-run only what
broke.
iOS Simulator Runtime Installer — download and install missing Simulator
runtime images from within the app.
Navigation & windowing
Multi-Tab Content Navigation — the main window hosts multiple content tabs,
so several runtime objects stay open side by side. Open in New Tab works
from both content-view type links and sidebar rows, and each tab keeps its own
navigation timeline.
Selection History — back / forward run off a real history cursor, the way
Xcode and Finder do, with a Navigation History menu exposing the full
per-tab timeline. The active inspector tab is preserved across selections.
Sidebar — runtime objects are grouped into kind sections instead of a flat
list; a Filter Scope popover prefilters by kind and property before you
type; single-clicking a non-leaf row expands it; and a setting caps how deep a
double-click expands a subtree.
Quit After Closing Last Window — a new Settings → General → Windows
toggle, off by default. On, the app exits with its last window instead of
staying resident.
Appearance
Theme Settings — a new panel with built-in presets (including an
Xcode-matching one) and directly editable colors. One source drives the content
view, inspector, and every syntax-highlighted surface, and changes apply live.
Line Numbers — a gutter down the left edge of the interface text view.
Loading placeholders — panes that fetch content asynchronously now show a
placeholder shaped like the content it replaces, instead of leaving the previous
type's data on screen. Work that finishes quickly shows no placeholder at all.
Code injection
Strict-seatbelt daemons and Apple applications — targets that refused the
standard injection path (sharingd, rapportd, and every Apple application,
which enforces library validation) now go through a mach_vm_remap-based path.
Everyday targets are unchanged; the new path only engages where the standard
route cannot work.
Bug fixes
- Objective-C protocols reappear for UIKitCore, Foundation, and friends.
Images caught in a dyld dependency cycle listed no protocols at all. - Injecting into Apple applications works. Attaching to Music and its peers
failed silently — routed onto a path that could never load the payload, with
no error reported. - The Inspector no longer blanks when you switch types. It also no longer
lets a slow query for an earlier type overwrite a newer one's results. - Sidebar selection no longer blinks grey when you click a related type or
jump to a definition. - The tab strip no longer flashes when switching to a kind with a different
set of Inspector tabs. - Clicking the Dock icon reopens a window even when Settings or an update
alert is still on screen. - Attached daemons show their real icon instead of an App Store placeholder.
- A second instance no longer reports a phantom MCP server, and no longer
keeps ~21 MiB of network transport resident after losing the port. - Bonjour no longer crashes on batched receives when inspecting an iOS /
visionOS / Apple TV target, or exporting through a Bonjour connection. - Attached-app and Mac Catalyst inspection no longer fails with "An unknown
error occurred", and loading progress streams across the proxy hop instead of
sticking at "Preparing…". - Nested sidebar specializations keep their identity across sidebar rebuilds.
- Returning from another scene no longer leaves the content pane blank.
- Export module metadata resolution fixed (#72).
- The Xcode theme preset gained a light-mode selection color.
Improvements
- Popovers size themselves to their content instead of a fixed 500×500 box.
- The Specialization type picker no longer blocks the UI when a generic
parameter has 10k+ candidates, and its popover no longer animates out of place. - Clearing the sidebar filter is instantaneous — no debounce on an empty query.
- The Mirror menu icon was refreshed, and the toolbar no longer shows an empty
overflow chevron on macOS 15.
Platform requirements
- Main app: macOS 15+
- MCP features: macOS 15+
- iOS variant: iOS 18+
Upgrade notes
- The helper daemon reinstalls itself on first launch — one admin prompt,
then a restart. This happens even if you were runningv2.1.0-RC.3: the
daemon-side fix that routes Apple applications onto the working injection path
shipped in RC.3, but the version the app checks against did not move with it,
so installed helpers were never replaced. This release delivers it. - From a beta or RC — this build supersedes
v2.1.0-RC.3; switching back to
the stable channel needs no reinstall of the app itself. - From v2.0.x — no migration steps. Bookmarks, settings, and connections
carry over as-is.