github doronz88/pymobiledevice3 v11.16.0

latest releases: v11.16.3, v11.16.2, v11.16.1...
5 hours ago

Highlights

🐛 sudo remote start-tunnel / tunneld find USB devices again on macOS

v11.15.5 made every RSD handshake on macOS identify itself with the host remoted's UUID, read from remotectl dumpstate — once per connection. remotectl gets its answer from remoted, and the RSD-over-bonjour path connects to the device while remoted is suspended, so each handshake sat out remotectl's 10 second timeout and the device was silently skipped:

$ sudo pymobiledevice3 remote start-tunnel --no-native
INFO No tunnel services discovered, trying again

The identity is now resolved once per process, before remoted is suspended.

✨ Wi-Fi devices are recognized offline — no more trying pair records against the network

Finding a paired device over Wi-Fi used to mean trying every RemotePairing record against every address of every _remotepairing._tcp advert on the network — a connect, a handshake and a failed pair-verify per guess, including against devices that aren't yours. tunneld repeated that every 5 seconds, even for devices it already tunneled.

The advert is built to avoid this: it carries an authTag derived from a key (altIRK) the device hands over during pairing. pymobiledevice3 now stores that key in the pair record and matches adverts to records before sending anything, so only devices you are paired with are contacted, each with its own record, and tunneld skips the ones it already serves. This affects remote tunneld, remote browse, remote start-tunnel -t wifi and the userspace tunnel's RemotePairing fallback.

Important

RemotePairing records created by earlier versions don't contain the key and can no longer be matched over Wi-Fi (USB/RSD use is unaffected). A one-time warning names the stale ~/.pymobiledevice3/remote_<udid>.plist — delete it and pair again. Over USB this is promptless:

pymobiledevice3 lockdown remotepairing --pair

🐛 --mobdev2 --udid connects only to the requested device

Warning

This change broke --mobdev2 --udid for devices using a private Wi-Fi address (the iOS default), which advertise a randomized MAC — the command fails with Device is not connected. Fixed in v11.16.1; please use that version.

With a UDID, the mobdev2 lookup still opened a lockdown connection to every advertised device it had no record for and returned all of them, so --mobdev2 --udid X could prompt between unrelated devices. It now connects only to the advert whose Wi-Fi MAC matches the device's pair record, finds that record through usbmuxd when it isn't cached in ~/.pymobiledevice3, and doesn't browse at all when there is no record to recognize the device by.

What's Changed

Full Changelog: v11.15.5...v11.16.0

Don't miss a new pymobiledevice3 release

NewReleases is sending notifications on new releases.