Skip to content

v10.10.3

Choose a tag to compare

@doronz88 doronz88 released this 21 Aug 12:18
· 46 commits to master since this release
62e2957

Highlights

🐛 DTX/XCTest payloads decode correctly under Python 3.15 lazy imports

On Python 3.15+ the CLI and test suite run with PEP 810 lazy imports. The NSKeyedArchive proxy classes used to decode DTX and XCTest payloads were registered with bpylist2 only as an import-time side effect, and a lazily-imported module body does not run until one of its names is actually used. Decode paths that reach archiver.unarchive() without touching such a name therefore saw an unpopulated class map and silently fell back to plistlib, logging a warning per message and returning the raw archive dict instead of the decoded object.

Two independent cases were affected and are now fixed by registering the classes through an explicit, idempotent call instead of relying on the import side effect:

  • DTX tap messages (DTSysmonTapMessage, DTTapHeartbeatMessage, ...) — surfaced as decode warnings on developer dvt sysmon and other tap-based commands.
  • XCTest result types (XCTIssue, XCActivityRecord, XCTestConfiguration, ...) — XCUITest results decoded to raw plist dicts instead of typed objects.
# Previously noisy on Python 3.15; now clean:
pymobiledevice3 developer dvt sysmon process single -k execName

This only affected Python 3.15; Python ≤ 3.14 (eager imports) was never impacted.

What's Changed

Full Changelog: v10.10.2...v10.10.3