github doronz88/pymobiledevice3 v11.1.3

latest releases: v11.29.0, v11.28.2, v11.28.1...
one month ago

Highlights

🐛 The native tunnel stops guessing which launchd domain holds remotepairingd

v11.1.1 taught the macOS native transport to reach the per-user remotepairingd from a process running as root, by retargeting the XPC connection whenever the effective uid was 0. That keyed off the wrong signal.

What actually decides reachability is which bootstrap namespace the process inherited, not its uid. Plain sudo from a logged-in user's terminal inherits that user's namespace and the ordinary lookup already works there; a LaunchDaemon or anything under launchctl asuser 0 lands in a domain where the service is not registered at all and gets XPC_ERROR_CONNECTION_INVALID back.

So the ordinary lookup is now always tried first, and another uid's domain is searched only once the daemon has actually reported the service missing. The probe is free — the error arrives about 0.2 ms after xpc_connection_activate, not at a timeout — and the outcome is memoized per process, so later browses go straight to whatever answered.

# unchanged, and still works from a root daemon or CI runner
pymobiledevice3 remote start-tunnel

# skip the first attempt on a host with no console user
PYMOBILEDEVICE3_NATIVE_TARGET_UID=501 pymobiledevice3 remote start-tunnel

# pin the ordinary lookup and disable retargeting entirely
PYMOBILEDEVICE3_NATIVE_TARGET_UID=0 pymobiledevice3 remote start-tunnel

Scope, stated plainly: on every configuration measured — normal user, launchctl asuser 0, plain sudo, and both with and without the environment variable — v11.1.2 and v11.1.3 reach the device equally. The behaviours diverge only when the console user is not the user whose namespace was inherited, such as sudo from one user's SSH session while another is at the console. If v11.1.2 works for you, this release changes nothing you can observe; it removes a guess, and reacts to what the daemon reports instead.

A seeded uid is refused with a warning unless the effective uid is 0, since the retarget SPI traps the process when a non-root caller invokes it.

What's Changed

Full Changelog: v11.1.2...v11.1.3

Don't miss a new pymobiledevice3 release

NewReleases is sending notifications on new releases.