Loupe provides runtime debugging tools for SwiftUI applications. Visualize render cycles, inspect layout bounds, track positions, and overlay precision grids—all with minimal setup and zero impact on production builds.
Render Debugging
.debugRender()- Visualize when views re-render with colored backgrounds.debugCompute()- Visualize when views re-initialize with red flashesRenderCheck- Batch debugging wrapper for multiple views
Layout Inspection
VisualLayoutGuide- Display bounds, safe area insets, and dimensionsDraggablePositionView- Track coordinates with draggable overlaysVisualGridGuide- Overlay precision alignment grids
Container Shapes (iOS 26+)
VisualCornerInsetGuide- Visualize ConcentricRectangle and container shapes
dependencies: [
.package(url: "https://github.com/Aeastr/Loupe.git", from: "1.0.0")
]import LoupeSee when views re-render or re-compute:
Text("Count: \(count)")
.debugRender() // Shows re-renders with colored backgrounds
.debugCompute() // Shows re-computations with red flashesBatch debug multiple views:
RenderCheck {
Text("A")
Text("B")
Text("C")
}Display bounds, safe area insets, and dimensions:
ZStack {
Color.blue
.overlay {
VisualLayoutGuide("Content Area")
}
}Enable dragging and persistence:
VisualLayoutGuide("Debug View")
.visualLayoutGuideInteractions(dragEnabled: true, persistenceEnabled: true)Monitor coordinates with draggable overlays:
DraggablePositionView("Tracker")
.draggablePositionViewInteractions(dragEnabled: true)Add precision alignment grids:
VisualGridGuide("8pt Grid", squareSize: 8, fit: .exact)
.ignoresSafeArea()Visualize ConcentricRectangle and container shapes:
VisualCornerInsetGuide("Container Shape")
.padding(20)
.containerShape(RoundedRectangle(cornerRadius: 32))All debugging tools are conditionally compiled with #if DEBUG. They are automatically excluded from release builds—no manual cleanup required, no performance impact in production.
- debugRender() uses a
Canvasthat generates a random color on each render - debugCompute() uses a
LocalRenderManagerthat triggers a red flash on view initialization - VisualLayoutGuide uses
onGeometryChangefor efficient size/inset tracking with automatic collision detection - VisualGridGuide calculates optimal square sizes using GCD for perfect tiling
Contributions welcome. Please feel free to submit a Pull Request.
MIT. See LICENSE for details.