UIKit Web Inspector for WKWebView.
Warning
This package relies on undocumented APIs and runtime behavior, so extra care is needed before using it in App Store-bound projects.
- DOM tree browsing
- Network request logging
- Built-in DOM and Network tabs
- Swift 6.3+
- iOS 18+
- ARM64/ARM64e Apple runtime; Intel Mac / x86_64 simulator environments are not supported.
- The current implementation targets UIKit on iOS.
- AppKit support is planned to be rebuilt separately.
| Product | Use when |
|---|---|
WebInspectorKit |
You want the built-in UIKit inspector UI. |
WebInspectorDataKit |
You want observable DOM, Network, Console, Runtime, and CSS models for a custom UI. |
WebInspectorDataKitTesting |
You want deterministic WebInspectorContext startup synchronization in tests. |
WebInspectorProxyKit |
You want typed Web Inspector protocol commands and events directly over an inspected WKWebView. |
WebInspectorProxyKitTesting |
You want a controllable proxy backend and protocol fixtures without the native WebKit bridge. |
import UIKit
import WebKit
import WebInspectorKit
final class BrowserViewController: UIViewController {
private let pageWebView = WKWebView(frame: .zero)
@objc private func presentInspector() {
let inspector = WebInspectorViewController()
inspector.modalPresentationStyle = .pageSheet
if let sheet = inspector.sheetPresentationController {
sheet.detents = [.medium(), .large()]
sheet.selectedDetentIdentifier = .medium
}
Task { @MainActor in
try await inspector.attach(to: pageWebView)
present(inspector, animated: true)
}
}
}let inspector = WebInspectorViewController(
tabs: [.dom, .network]
)The built-in tab surface exposes DOM and Network tabs. Apps can also add UIKit
tabs with a UIViewController factory:
let consoleTab = WebInspectorTab(
id: "app_console",
title: "Console",
systemImage: "terminal"
) { session in
ConsoleViewController(inspectorSession: session)
}
let inspector = WebInspectorViewController(
tabs: [.dom, .network, consoleTab]
)The repository includes a self-authored, loopback-only integration site for
manual Monocly verification through a real WKWebView and WebKit protocol
backend. It combines a large DOM, mutation burst, iframe, shadow/pseudo nodes,
navigation, and representative Network traffic without third-party assets:
DEVICE_UDID=<booted-simulator-udid> Scripts/run-monocly-fixture.shSee Inspector Integration Fixture for the verification matrix and deterministic fixture regression test.
The DocC workflow publishes package documentation to GitHub Pages.
| Document | Purpose |
|---|---|
| Migration Guide | Version-by-version source migration notes for app code. |
| WebInspectorUI | UIKit inspector implementation notes and UI/DataKit ownership boundaries. |
| WebKit Version Mapping | Local notes for mapping iOS WebKit framework versions to public WebKit source refs. |
Sources/
WebInspectorKit/ Public built-in inspector product.
WebInspectorDataKit/ Observable inspector model product.
WebInspectorDataKitTesting/ Deterministic DataKit consumer test helpers.
WebInspectorProxyKit/ Typed protocol proxy product.
WebInspectorProxyKitTesting/ Controllable proxy test runtime and fixtures.
WebInspectorUI*/ Internal UIKit implementation targets.
Packages/
WebInspectorNativeBridge/ Local native bridge package for ProxyKit internals.
Docs/
MIGRATION.md Version-by-version migration notes.
WebKitVersionMapping.md WebKit runtime/source mapping notes.
See LICENSE.
