Skip to content

v11.10.0

Choose a tag to compare

@doronz88 doronz88 released this 08 Sep 06:56
· 10 commits to master since this release
4f7c202

Highlights

This release is all about the Chrome DevTools Protocol bridge (pymobiledevice3 webinspector cdp): editor-grade debugging of Safari pages and JSContexts from Chrome DevTools, VS Code and WebStorm, plus the groundwork to keep it correct.

🐛 Step-over on a JSContext no longer stalls in WebStorm

Stepping through a JSContext in WebStorm (and other strict Chrome-protocol clients) stopped advancing after the first step. WebKit emits no Debugger.resumed event and puts inspector-internal frames on the paused call stack, neither of which Chrome does; the bridge now synthesizes the missing Debugger.resumed to keep the paused/resumed alternation and strips WebKit's native entry frame and InjectedScript harness so a pause matches what node --inspect reports.

✨ Chrome's Fetch domain for request mocking and Basic auth

The bridge now translates Chrome's Fetch domain onto WebKit's request interception, so a client can mock, modify or block requests and answer an HTTP Basic auth challenge with no on-device dialog.

pymobiledevice3 webinspector cdp

✨ Full Node.js inspector surface on JSContexts

An editor attaching to a JSContext does so as a Node.js target. The bridge now presents the events those clients rely on: uncaught exceptions and rejections as Runtime.exceptionThrown (VS Code renders exceptions from nothing else), Runtime.addBinding/bindingCalled, inspect() as Runtime.inspectRequested, context teardown, and pre-load URL breakpoints that bind and hit.

✨ Record a protocol trace for bug reports

--trace records every protocol message in both directions, so a debugging problem can be reported with the exact wire log.

pymobiledevice3 webinspector cdp --trace /tmp/cdp-trace.jsonl

✨ The bridge is now checked against the WebKit and Chrome protocol definitions

A conformance test reads the bridge's source and checks every protocol name it uses against vendored copies of WebKit's and Chrome's (and Node's) protocol definitions. It already caught a real bug: dark-mode emulation was sent as Page.setForcedAppearance, which iOS 26 no longer has, and now maps onto Page.overrideUserPreference.

🐛 Correct iframe-to-frame correlation

On iOS 26 the frame tree is ordered by creation, not document order; the bridge now correlates an <iframe> element to the frame it hosts by identity, so a cross-origin frame is driven correctly.

What's Changed

Full Changelog: v11.9.2...v11.10.0