Highlights
✨ macOS: a no-root native tunnel that piggybacks Apple's remoted
iOS 17+ developer/DVT commands need an RSD tunnel. On macOS pymobiledevice3 can now reach one by riding Apple's own remoted tunnel via the base-OS remotepairingd service — no root, no entitlement, no Xcode — and it leaves remoted running, so it coexists with Xcode/devicectl (unlike the kernel/bonjour path, which has to suspend remoted). It rides the kernel-routable tunnel, so it is faster host→device and lower latency than the userspace tunnel. It is now the default transport on macOS (native → userspace → tunneld), and available explicitly as --native:
# Specify explicitly
pymobiledevice3 developer dvt ls / --native
# Will implicitly choose the native fallback on macOS
pymobiledevice3 developer dvt ls /This was based on the amazing work done by @olevar! (https://frida.re/news/2024/05/31/frida-16-3-0-released/)
✨ Pick the transport: PYMOBILEDEVICE3_DEFAULT_FALLBACK and PreferredRsdTunnel
PYMOBILEDEVICE3_DEFAULT_FALLBACK=native|userspace|tunneld overrides which transport the automatic selection prefers (built-in default: native on macOS, userspace elsewhere). From your own code, PreferredRsdTunnel picks the best no-root transport for the host:
from pymobiledevice3.remote.rsd_tunnel import PreferredRsdTunnel
async with PreferredRsdTunnel(serial=udid) as rsd:
... # native on macOS, userspace elsewhere — no root💥 Breaking: PYMOBILEDEVICE3_PREFER_TUNNELD removed
The PYMOBILEDEVICE3_PREFER_TUNNELD environment variable is gone. Use PYMOBILEDEVICE3_DEFAULT_FALLBACK=tunneld instead.
What's Changed
- 3a01938 remote: add macOS-native RSD tunnel and make it the default (no root) (#1874) (@doronz88)
- 95459e0 docs: document the native tunnel and transport selection (#1874) (@doronz88)
Full Changelog: v10.11.5...v11.0.0