# LookInside LookInside is a Mac app that inspects a running iOS or macOS app UI. It shows the view tree, layer tree, frames, screenshots, SwiftUI modifiers, live properties, multiple inspection windows, and Swift hash ID resolution. ## How it works 1. Add the LookInsideServer package to your iOS/macOS app (Debug only). 2. Build and run your app. 3. Open the LookInside Mac app — it discovers Simulator apps, local macOS apps, and USB-connected devices. 4. Click any view to inspect its tree, frames, properties, and SwiftUI modifiers. ## Multi Window Support LookInside is a document-based Mac app. Each live inspection opens as its own document 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. ## Private Discriminator Private Discriminator resolves Swift hash IDs back to readable module and filename hints. Use it this way: 1. Open LookInside → Private Discriminator Settings… and enable Private Discriminator. 2. Update the default library to download SwiftUI and SwiftUICore indexes into local CSV storage. 3. For app-specific Swift code, import the local Swift source folder for the matching module. 4. If a selected object still shows a hash ID, use Discriminator Details to import from that codebase or run swift-pd-guess. Source folders stay on the user's Mac. LookInside stores generated CSV indexes locally under Application Support. ## Install LookInsideServer LookInsideServer is the runtime that ships inside the inspected app. It is published as a Swift package, a CocoaPods pod, and an XCFramework at https://github.com/LookInsideApp/LookInside-Release (MIT). Pick one integration method. ### Swift Package Manager (Package.swift) In Xcode: File → Add Package Dependencies… → paste the URL → choose "Up to Next Major" → add the LookInsideServer product. Or declare it directly in Package.swift: let package = Package( dependencies: [ .package( url: "https://github.com/LookInsideApp/LookInside-Release.git", from: "0.2.2" ), ], targets: [ .target( name: "YourApp", dependencies: [ .product( name: "LookInsideServer", package: "LookInside-Release" ), ] ), ] ) `from:` follows SemVer up to the next major version, so SPM resolves to the newest 0.x release automatically. ### CocoaPods (Podfile) target "YourApp" do pod "LookInsideServer", :podspec => "https://raw.githubusercontent.com/LookInsideApp/LookInside-Release/main/LookInsideServer.podspec", :configurations => ["Debug"] end Then run `pod install` in the project root, and open the generated `.xcworkspace`. The podspec lives on `main` and always points at the latest released tag, so `pod update LookInsideServer` picks up new versions without changing the Podfile. ### Manual XCFramework curl -L -o LookInsideServer.xcframework.zip \ "https://github.com/LookInsideApp/LookInside-Release/releases/latest/download/LookInsideServer.xcframework.zip" unzip LookInsideServer.xcframework.zip Drag `LookInsideServer.xcframework` into the Xcode project navigator. In the debug target's General tab → Frameworks, Libraries, and Embedded Content, set it to **Embed & Sign**. ## Required: keep the server out of Release builds LookInsideServer is for Debug only. In your app target's Release build settings, set **Excluded Source File Names** to `LookInsideServer*` so the server (and its symbols) never ship to the App Store. The CocoaPods snippet above already restricts the pod to the Debug configuration. ## Platform requirements - iOS 13+ - macOS 14+ - Swift 5.9+ - Xcode 15+ ## Pricing - Standard: free, includes UIKit, AppKit, multiple inspection windows, Swift hash ID resolution, screenshots, and property reads - Pro: $49.99, includes SwiftUI inspection and one year of updates - Trial: 14 days ## Documentation Step-by-step guides for installing and using LookInside: - Getting Started: https://lookinside-app.com/docs/getting-started - Multi-Window Support: https://lookinside-app.com/docs/multi-window-support - Private Discriminator: https://lookinside-app.com/docs/private-discriminator ## Blog Product reasoning and feature deep-dives: - Why LookInside Supports Multiple Inspection Windows: https://lookinside-app.com/blog/multi-window-support - Swift Hash IDs and How LookInside Resolves Them Locally: https://lookinside-app.com/blog/private-discriminator ## 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 - Contact: support@lookinside-app.com - GitHub org: https://github.com/LookInsideApp - Server releases: https://github.com/LookInsideApp/LookInside-Release/releases