A modern alternative to RuntimeBrowser for inspecting Objective-C and Swift runtime interfaces
| Language | Library | Upstream |
|---|---|---|
| Objective-C | MachOObjCSection | fork of p-x9/MachOObjCSection |
| Swift | MachOSwiftSection | — |
| Mach-O | MachOKit | fork of p-x9/MachOKit |
| Injection | MachInjector | — |
- Swift & Objective-C Interfaces – Generate Swift type interfaces (with type/enum layouts and VTable offsets) alongside Objective-C headers directly from Mach-O binaries
- Xcode-Style Syntax Highlighting – Full AppKit text view with type-defined jumps and rendering identical to Xcode
- Customizable Color Themes – Pick a syntax theme in Settings → Theme; duplicate the built-in Xcode preset to edit per-token colors (with bold/italic), the editor background, and selection color. Each theme carries light and dark variants that adapt to the system appearance
- MCP Integration (macOS 15+) – Let LLM clients (e.g., Claude) inspect runtime information via the Model Context Protocol, with an in-process bridge and a toolbar status indicator
- Bonjour Multi-Device Mirroring – Discover and connect to iOS/macOS devices on the local network; remote engines appear in the toolbar's source switcher grouped by host
- Export Interface Wizard – Xcode-style multi-step wizard for exporting ObjC/Swift interfaces to single or multiple files
- Runtime Interface Transformers – Customizable transformer modules for C type replacement, Swift type/enum layouts, VTable offsets, and member addresses, with reorderable token template presets
- Code Injection – Inject into x86_64 and arm64e processes (system apps supported via helper service; requires SIP disabled). Injected processes automatically reconnect across app restarts; sandboxed apps are supported over local TCP sockets
- Auto-Update – Sparkle-powered updates with daily checks, manual Check for Updates…, EdDSA-signed archives, and an opt-in beta channel for RC / beta builds
- Framework Support – Browse
macOSframeworks,iOSSupportframeworks, and load custom Mach-O binaries or frameworks - Determinate Loading Progress – Phase-based progress feedback while indexing Swift and Objective-C sections
- Filter Engine – Fuzzy search across runtime classes, protocols, and members
- Bookmarks – Reorderable, persisted bookmarks for runtime objects
Download the macOS release archive from GitHub Releases, extract it, and move RuntimeViewer.app to your Applications folder. GitHub Releases is the official source for prebuilt versions of Runtime Viewer. The project does not publish a Homebrew cask; any such cask is unofficial and unsupported. See Requirements for supported macOS versions.
Runtime Viewer does not automatically list every application on your Mac. After launching it, choose one of these ways to obtain content:
- Browse the bundled Local Runtime source to inspect the local runtime and framework directory.
- Use Attach Process in the toolbar to explicitly attach to a running process. Process attachment requires System Integrity Protection (SIP) to be disabled; see Requirements and Troubleshooting.
- Select another Runtime Viewer instance discovered on your local network. See Connecting to Other Devices for Bonjour details.
To enable inter-process communication and code injection, register the SMAppService helper from Settings → Helper Service by clicking Install. Installing the helper does not install the main app or automatically create connection targets. After major updates, Runtime Viewer detects version mismatches and prompts for reinstallation automatically.
To expose runtime information to an LLM client:
- Open Settings → MCP
- Copy the server configuration via the Copy Config button
- Paste it into your LLM client's MCP configuration
The MCP bridge starts automatically on app launch; check the toolbar status indicator to confirm.
Runtime Viewer discovers other instances on the local network via Bonjour. On iOS, allow the local-network permission when prompted. Remote engines appear in the toolbar source switcher grouped by host.
Closing the last window leaves Runtime Viewer running, and clicking its Dock icon opens a new window. To have the app quit together with its last window instead, enable Settings → General → Quit After Closing Last Window.
Runtime Viewer uses Sparkle for automatic updates.
- The app checks for updates once a day by default. You can adjust the interval or disable automatic checks in Settings → Updates.
- To try pre-release builds, enable Settings → Updates → Include pre-release versions (Beta). RC and beta builds are delivered through the same feed on an opt-in channel.
- You can always run a manual check from Runtime Viewer → Check for Updates….
- Release feed:
https://mxiris-reverse-engineering.github.io/RuntimeViewer/appcast.xml.
If Catalyst or code-injected applications don't appear in the directory list, try restarting the application.
- Main application: macOS 15+
- Process attachment: System Integrity Protection (SIP) disabled
- RuntimeViewerCore (inspection engine): macOS 10.15+, iOS 13+, Mac Catalyst 13+, watchOS 6+, tvOS 13+, visionOS 1+
- MCP integration: macOS 15+
- Build toolchain: Xcode 26.2+ (Swift 5 language mode)






