github doronz88/pymobiledevice3 v11.26.0

2 hours ago

Highlights

✨ Memory instruments for development-signed apps

Four Instruments channels are now wrapped. The device only serves them for debuggable apps (development-signed, with get-task-allow); any other process is refused with a one-line ProcessInspectionError.

# Regions of the address space
pymobiledevice3 developer dvt vm-regions PID

# Memory graph for leaks(1), heap(1) or vmmap(1); prints the leak count and addresses as JSON
pymobiledevice3 developer dvt memgraph PID app.memgraph
leaks app.memgraph

# Launch with malloc stack logging and the graph also carries allocation backtraces
pymobiledevice3 developer dvt launch --env MallocStackLogging=1 com.example.app
pymobiledevice3 developer dvt memgraph PID app.memgraph
malloc_history app.memgraph --fullStacks ADDRESS

# Launch an app and summarize its heap allocations by class (on Ctrl+C or after --duration)
pymobiledevice3 developer dvt allocations com.example.app --duration 10

# Or print every event with its backtrace as image+offset frames
pymobiledevice3 developer dvt allocations com.example.app --events --kind heap --kind reference-counts

# Launch timing, image and dlopen counts as the dynamic loader recorded them
pymobiledevice3 developer dvt dyld-metrics PID

The library side is VMTracking, Leaks, Allocations and DyldMetrics under pymobiledevice3.services.dvt.instruments. ProcessControl also gained is_debuggable, suspend and resume.

✨ File operations and change monitoring in app containers

developer core-device can now edit a file-service domain, not only list and read it, and on iOS 27+ stream its changes.

pymobiledevice3 developer core-device create-directory appDataContainer Documents/logs --identifier com.example.app
pymobiledevice3 developer core-device write-file appDataContainer Documents/logs/a.txt ./a.txt --identifier com.example.app
pymobiledevice3 developer core-device stat appDataContainer Documents/logs/a.txt --identifier com.example.app
pymobiledevice3 developer core-device rename appDataContainer Documents/logs/a.txt Documents/logs/b.txt --identifier com.example.app
pymobiledevice3 developer core-device create-symlink appDataContainer Documents/link Documents/logs/b.txt --identifier com.example.app
pymobiledevice3 developer core-device remove-file appDataContainer Documents/logs/b.txt --identifier com.example.app

# One JSON record per change (iOS 27+)
pymobiledevice3 developer core-device watch appDataContainer --identifier com.example.app

FileServiceService gained the matching methods, including descriptor-based open_file / read_file / write_file / truncate_file. Always close the service: a client that vanishes with an open session can leave the device's file service stuck until the device restarts.

🐛 A service that never answers the RemoteXPC handshake

A daemon that accepts the connection but never answers (stuck, or refusing this host) surfaced as a raw TimeoutError traceback. It now raises RemoteXPCHandshakeTimeoutError, which the CLI reports in one line.

🐛 DTX: channel cancellations sent by the device

A cancellation the device initiated carries the channel code with the opposite sign, so it was reported as a protocol error for an unknown channel and the channel stayed registered. It is now applied to the right channel. DTX also gained keyed messages (send_keyed_message), which the dyld metrics service is driven with.

What's Changed

Full Changelog: v11.25.0...v11.26.0

Don't miss a new pymobiledevice3 release

NewReleases is sending notifications on new releases.