# LookInside Last updated: 2026-05-19 LookInside is a Mac app that inspects a running iOS or macOS app UI. ## What it shows - View tree - Layer tree - Frames and screenshots - UIKit, AppKit, and SwiftUI details - SwiftUI modifiers, transforms, Display List IDs, and backing CALayers - Multiple inspection windows - Swift hash ID resolution with Private Discriminator - Live property changes for supported properties ## How to use it 1. Add the LookInside server package to the app you want to inspect. 2. Run the app. 3. Open LookInside on your Mac. 4. Pick the running app. 5. Click any view. ## Multi Window Support LookInside is a document-based Mac app. Each live inspection can stay open in its own inspection window, so developers can inspect multiple targets or compare a saved archive with a live target side by side. Lookin only allowed one inspection window at a time. Each inspection document keeps its own target binding, hierarchy, dashboard, console, reload, and reconnect state. ## Private Discriminator Private Discriminator maps Swift hash IDs back to readable module and filename hints when a matching CSV index is available. LookInside can download SwiftUI and SwiftUICore indexes into local CSV storage. How to use Private Discriminator: 1. Open LookInside > Private Discriminator Settings. 2. Enable Private Discriminator. 3. Click Update Default Library to download SwiftUI and SwiftUICore indexes. 4. For your app code, import the local Swift source folder for the matching module. 5. Select an object with an unresolved Swift hash ID and open Discriminator Details. 6. If it is still unresolved, import from that codebase or run swift-pd-guess. 7. Keep Autosave on if you want verified guessed rows saved for future sessions. Source folders stay on the user's Mac. LookInside stores generated CSV indexes locally under Application Support. Simulator apps connect locally. Physical iPhone and iPad devices connect over USB. ## Pricing Standard is free and covers UIKit, AppKit, multiple inspection windows, Swift hash ID resolution, screenshots, and property reads. Pro is $49.99 and adds SwiftUI inspection. It includes a 14-day trial and one year of updates. ## Documentation ### Getting Started https://lookinside-app.com/docs/getting-started Add LookInsideServer 0.2.2 to your app for the Debug configuration only. Choose Swift Package Manager, CocoaPods, or the manual XCFramework. In your Release build settings, set Excluded Source File Names to LookInsideServer* so the server never ships to the App Store. SPM: add https://github.com/LookInsideApp/LookInside-Release.git with "Up to Next Major" version. CocoaPods: pod "LookInsideServer" with :configurations => ["Debug"]. Manual: download the XCFramework zip from the latest GitHub release, drag into Xcode, set to Embed & Sign. Platform requirements: iOS 13+, macOS 14+ (inspected app), macOS 13+ (LookInside), Swift 5.9+, Xcode 15+. ### Multi-Window Support https://lookinside-app.com/docs/multi-window-support LookInside is a document-based Mac app. Each inspection opens as its own document window with independent connection, view hierarchy, dashboard, console, and reconnect state. Connecting to the same target focuses its existing document rather than opening a duplicate. To open another inspection simultaneously, go to File → New Inspection… or choose a different target from the app picker in an existing inspection window. Archive (.lookin) files open as read-only document windows alongside live inspections. ### Private Discriminator https://lookinside-app.com/docs/private-discriminator Swift uses a private discriminator hash — a 128-bit identifier derived from the module name and filename — for private types. The inspector may show: CGDrawingView in _863CCF9D49B535DAEB1C7D61BEE53B59. Private Discriminator resolves this to SwiftUICore / CALayerPlatformViewDefinition.swift using local CSV indexes. For your own app code, point LookInside at the Swift source folder for the module; it builds a local index under Application Support. Source folders never leave your Mac. For unknown hashes (closed-source frameworks), use swift-pd-guess for a heuristic match, verify, and enable Autosave to save the result locally. Source coverage: - SwiftUI & SwiftUICore → Update Default Library - Your app module → Import a local source folder - Unknown Swift hash ID → Guess, verify, then autosave ## Blog ### Why LookInside Supports Multiple Inspection Windows https://lookinside-app.com/blog/multi-window-support Published: 2026-05-19 Lookin allowed one inspection window at a time. Connecting to a second target disconnected the first. The workflow that came up most often: developers wanted a live iPhone inspection open while checking the same screen on an iPad simulator, or they wanted a saved archive as a reference alongside a live build. LookInside rearchitected as a document-based Mac app to fix this. Each live inspection maps to a document that owns its connection, view hierarchy, dashboard, and reconnect state. Connecting to the same target focuses its existing document. The document model gives LookInside standard Open Recent, Save As, and window-management behavior for archives and live inspections. The tradeoff: document-based apps require careful separation of global app state from per-document state. That investment was worth it to avoid the growing pile of single-window workarounds. ### Swift Hash IDs and How LookInside Resolves Them Locally https://lookinside-app.com/blog/private-discriminator Published: 2026-05-19 Swift generates a private discriminator hash — a 128-bit identifier from module name and filename — for private types so they stay distinct across modules. SwiftUI and SwiftUICore use this extensively. The hash is a one-way function; the runtime does not store the original inputs. LookInside can download precomputed CSV indexes for SwiftUI and SwiftUICore. When you select a view with a hash, LookInside looks it up locally and shows the module name and filename. For your own code, LookInside builds a local index from a Swift source folder without sending anything to a server. For closed-source frameworks, swift-pd-guess runs a heuristic search. Verified results are saved locally so future sessions skip the guess step. The local-first design is deliberate: source folders can contain proprietary code. Sending source paths or file contents to a server would be an unacceptable tradeoff. ## Links - Website: https://lookinside-app.com/ - Docs: https://lookinside-app.com/docs - Blog: https://lookinside-app.com/blog - Pricing: https://lookinside-app.com/pricing - Purchase: https://lookinside-app.com/purchase - Support: support@lookinside-app.com - GitHub: https://github.com/LookInsideApp