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
- 5594c51 remotexpc: Resolve the handshake UUID before remoted is suspended (#1970) (@doronz88)
- f8df3ee lockdown: Look a mobdev2 device up by its record's WiFiMACAddress only (#1969) (@doronz88)
- a8ef491 remotepairing: Match bonjour answers to pair records by authTag (#1969) (@doronz88)
Full Changelog: v11.15.5...v11.16.0