Releases: MxIris-Reverse-Engineering/RuntimeViewer
RuntimeViewer v2.0.1
v2.0.1
Stability patch focused on multi-device runtime mirroring and the
underlying message-channel transport.
Improvements
AWDL / Bonjour transport
- Per-request timeouts on every mirrored-engine RPC so a stalled remote no longer pins a sidebar entry indefinitely
- Heartbeat-based liveness probes for AWDL-routed peers — the sidebar reflects reality much faster when a peer drops off
- Tolerate transient AWDL congestion: brief failures no longer fire a spurious "disconnected" notification
Engine mirroring
- Forwarded mirror engines are cleared when the leaf peer they advertise actually disconnects
- Mirrors duplicating a direct local route are suppressed so a peer doesn't show up twice when reached two ways
Bug Fixes
RuntimeMessageChannel.sendRequestreleases its send semaphore on every exit path (previous code leaked a slot whenever the request threw)- The timeout task is cancelled the moment a response arrives, so it can't fire later against a re-used identifier
- Pending requests are drained with an error when the underlying transport closes — callers no longer hang on a dead channel
Internal
- Release tooling renamed
ReleaseScript.sh→ArchiveScript.sh; gains--update-packages - Runtime-engine ownership moved into the
RuntimeViewerApplicationpackage; mirror reconcile/dedup logic extracted intoRuntimeEngineMirrorRegistrywith unit tests RuntimeViewerCore/RuntimeViewerPackagesgainUSING_LOCAL_DEPENDENCIESenv switch
Dependencies
- Bump AssociatedObject 0.15, combine-schedulers 1.2, FrameworkToolbox 0.5.2, Rearrange 2.1.1, swift-asn1 1.7, swift-certificates 1.19.1, swift-dyld-private 1.2
- Add RunningApplicationKit + RxAppKit pins
RuntimeViewer v2.0.0
v2.0.0
Important
If you run into device connection issues (e.g., iOS devices or other macOS peers not being discovered), completely uninstall any previous version (App Cleaner is recommended) before retrying, and make sure every device is running the latest version.
Runtime Viewer v2.0.0 is a ground-up rewrite of the runtime inspection engine
with first-class Swift support, MCP integration for LLM clients, multi-device
inspection over Bonjour, and built-in auto-updates.
Manual install required for this release
v2.0.0 is the first RuntimeViewer build with Sparkle auto-updates. If you
are on v1.x or any earlier v2.x beta / RC, download and install this release
manually — future releases will arrive through Check for Updates….
Highlights
- Swift interface support — generate Swift type interfaces, memory layouts, and enum layouts from Mach-O binaries
- MCP integration — let LLM clients (e.g., Claude) inspect runtime information via the Model Context Protocol
- Bonjour multi-device — discover and connect to iOS / macOS peers on the local network; remote engines mirror into your toolbar
- Code injection reconnection — injected processes survive app restarts
- arm64e code injection — inject into arm64e system apps with helper service support
- Export interface wizard — Xcode-style multi-step export for ObjC and Swift interfaces
- Auto-update — opt-in beta channel, EdDSA-signed archives, feed served from GitHub Pages
What's new
Swift interface support
Swift type interfaces with memory layout, enum layout, VTable offsets, and
a generic-type indicator icon. Swift-specific generation options control
concurrency annotations, access control, and more. Powered by
MachOSwiftSection.
Faster, more accurate ObjC engine
ClassDumpRuntime is replaced by
MachOObjCSection.
Better performance, better memory behavior, with category dumping.
MCP integration (macOS 15+)
- Built-in MCP bridge server with automatic port discovery
- Tools to list classes / protocols, fetch interfaces, look up member addresses, and load/unload images
- Status indicator and connection popover in the main toolbar
- MCP settings page with port configuration and one-click client config copy
Bonjour & multi-device
- Discover and connect to iOS and macOS peers on the local network
- Remote runtime engines show up in the toolbar alongside local ones, grouped by host
- Device name, icon, and simulator flag carried over Bonjour metadata
- Automatic retry on transient failures
- iOS real-device support including local-network permission handling
Code injection
- Reconnect automatically to previously injected processes on app restart
- arm64e targets supported (main app stays arm64, helper and server frameworks compile as arm64e)
- Inspect sandboxed apps via local TCP sockets
Export & transformers
- New Xcode-style wizard for exporting ObjC / Swift interfaces to files — handles C++ template filenames and special characters
- Pluggable runtime interface transformers: C type replacement, Swift type layout, enum layout, VTable offsets, and member addresses
- Customizable token-template presets, reorderable in Settings
Auto-update (Sparkle)
- Check for Updates… directly below About
- Updates settings page with check interval, manual check, and an opt-in beta channel
- Every archive verified with an EdDSA signature
- Appcast feed served from GitHub Pages
Filters, bookmarks, and quality-of-life
- Fuzzy filter for classes and protocols
- Drag-to-reorder bookmarks
- Determinate progress bar in the sidebar with phase descriptions ("indexing Swift types", "loading ObjC classes", …)
- Debug → Export Logs for one-click OSLog export
- System notifications on connect / disconnect
- Jump-to-definition icon in the interface viewer
- IMP addresses shown in ObjC interface output
Platform requirements
- Main app: macOS 15+
- MCP features: macOS 15+
- iOS variant: iOS 18+
- Runtime inspection library: macOS 10.15+, iOS 13+, Mac Catalyst 13+, watchOS 6+, tvOS 13+, visionOS 1+
Migration from v1.x
- Helper Service — migrated to
SMAppService. Reinstall from Settings → Helper Service after upgrading. - Bookmarks — storage moved to Application Support; a one-time migration runs on first launch.
- MCP — new feature. Point your LLM client at the MCP server path shown in Settings → MCP.
RuntimeViewer v2.0.0-RC.6
v2.0.0-RC.6
One-time manual install required
This is the first RuntimeViewer build to include Sparkle-based auto-updates.
Users onv2.0.0-RC.3or any earlier v2.x beta/RC must download and install
this release manually — there is no auto-update path from a Sparkle-less
build. Every release after RC.6 will be delivered through the in-app
update flow.
New Features
Auto-Update (Sparkle)
- Integrated Sparkle for secure, in-app automatic updates
- Check for Updates… menu item directly below About
- New Updates settings page with "Check now", automatic-check toggle, check interval (hourly / daily / weekly), and opt-in pre-release (beta) channel
- EdDSA signature verification on every downloaded archive
- Appcast feed served from GitHub Pages (
docs/appcast.xml); subsequent releases update the feed automatically through the unifiedReleaseScript.sh
Bug Fixes
- Fix a receive-loop deadlock caused by conflicting no-response handler sentinels
- Serialize
RuntimeClientConnectionmutable state with@Mutexto eliminate a concurrent-access race
Dependencies
- Bump MachOKit to
0.49.100and drop the privateDyldPrivateimport
v2.0.0-RC.3
v2.0.0-RC.2
v2.0.0-RC.2
Bug fixes and improvements since v2.0.0-RC.1.
Improvements
App Behavior
- The app no longer quits when the last window is closed — you can reopen documents from the menu or Dock icon
- Window toolbar now uses the unified style for a cleaner look
Export
- Fixed the "Export Interface" menu item not being clickable
- The export menu is now automatically disabled when no image is selected, preventing accidental clicks
- Improved exported file naming for more intuitive output
Sidebar & Search
- Fixed the case-insensitive toggle not taking effect when filtering
- Fixed filter results not refreshing immediately after switching search modes
- Improved search debouncing to reduce unnecessary refreshes while typing
Interface Viewer
- ObjC method interface output now includes IMP address comments for easier function location
- ObjC property getter/setter interface output now includes IMP address comments
- Significantly improved syntax highlighting rendering performance for smoother browsing of large interfaces
MCP Integration
- Added
get_member_addressestool for querying Swift function and computed property memory addresses - Improved descriptions for all MCP tools so LLM clients can understand and use them more accurately
- Improved MCP Bridge async communication design for better stability
- Added "Copy MCP Server Path" menu item for easier LLM client configuration
Bug Fixes
- Fixed a crash in the export wizard caused by a lost router reference under certain conditions
- Fixed redundant work when loading the same image multiple times
- Fixed the window title not correctly reflecting the currently selected image name
- Fixed a potential crash when the case-insensitive search button was accessed before the view was fully loaded
v2.0.0-RC.1
Highlights
- Swift Interface Support — View Swift type interfaces alongside Objective-C, powered by MachOSwiftSection
- MachOObjCSection Integration — Replaced ClassDumpRuntime with MachOObjCSection for improved ObjC inspection performance, accuracy, and category dumping support
- MCP (Model Context Protocol) Integration — LLM clients (e.g., Claude) can now inspect runtime information via MCP
- Export Interface Wizard — Xcode-style multi-step wizard for exporting runtime interfaces to files
- arm64e Code Injection — Inject into arm64e applications (such as system apps) with helper service support
- macOS 26 / Xcode 26 Compatibility — Full adaptation for the latest macOS and Xcode
New Features
Swift Interface Support
- Add initial Swift interface generation support, fully integrated with MachOSwiftSection
- Support Swift section generation options and Swift concurrency
- View Swift type layouts and enum layouts with memory offset display
MCP Integration (Model Context Protocol)
- Add MCP Server executable for runtime inspection via LLM clients (macOS 15+)
Export Interface Wizard
- Export single or multiple runtime interfaces (ObjC/Swift) to files
Runtime Interface Transformer
- Customizable C type replacements in generated interfaces
- ObjC/Swift split transformer configuration with independent settings
- SwiftTypeLayout and SwiftEnumLayout transformers with memory offset display and uppercase hex formatting
Settings Panel
- New settings window with general settings, helper service management, and notification preferences
- Install/uninstall helper service directly from settings
- Configurable connection notification options
Filter Engine
- Implement filter engine and UI for runtime class/protocol filtering
- Add fuzzy search support for type name filtering
- RunningApplicationPicker supports search
Sandbox App Code Injection
- Add Local Socket connection support for injecting into sandboxed apps
- Communicate with sandboxed apps via local TCP socket
Connection & Notification System
- Automatic reconnection support with destroy-and-recreate strategy
- System notification when connecting to a new RuntimeSource
- Notification alert on disconnection
- Configurable notification options in settings
arm64e Architecture Support
- Support arm64e for code injection into arm64e applications (e.g., system apps)
- Main app remains arm64; only daemon and server-side Frameworks are compiled as arm64e
- Fixed crash in arm64e environment
Other Features
- Jump to definition icon in the interface viewer
- Open Quickly feature (WIP)
v2.0.0-beta.9
New Features
Settings Panel
- New settings window with general settings, helper service management, and notification preferences
- Install/uninstall helper service directly from settings
Sandbox App Code Injection
- Add Local Socket connection support for injecting into sandboxed apps
- Communicate with sandboxed apps via local TCP socket
Connection Notifications
- System notification when connecting to a new RuntimeSource
- Notification alert when disconnected
- Configurable notification options in settings
New Helper Service
- Migrate to new SMAppService helper architecture
- Requires reinstalling helper from the settings panel
- Support for uninstalling legacy helper service
Bug Fixes
Multiple Documents Infinite Loading
- Fix infinite loading issue when opening multiple document windows
XPC Connection Stability
- Fix crash when reconnecting XPC connections
- XPC connections now recover by destroying and recreating instead of reconnecting
v2.0.0-beta.8
Release Notes
Highlights
This release features a major refactor of the Objective-C runtime inspection engine, replacing ClassDumpRuntime with the new MachOObjCSection integration for improved performance and accuracy.
New Features
- Type Layout Support: Added support for printing Swift type layouts and enum layouts
- OpenQuickly (WIP): Initial implementation of quick navigation feature
- Bookmark(WIP): Add interested directories or RuntimeObjects to bookmarks
Major Changes
- MachOObjCSection Integration: Replaced ClassDumpRuntime with MachOObjCSection for Objective-C interface generation
- Improved performance and memory efficiency
- Support dumping Objective-C categories
Bug Fixes
- Fixed AppKit autosave name issues causing window state conflicts
v2.0.0-beta.5
Increased fuzzy search filter type name
RunningApplicationPicker supports search
Optimized Text View Loading flickering issue
v2.0.0-beta.4
-
Fixed crash on arm64e environment.
-
The main App is no longer compiled as arm64e; only the daemon and server-side Frameworks are compiled as arm64e (because injection into other arm64e programs is required, the main App remains arm64).