Skip to content

v9.37.0

Choose a tag to compare

@doronz88 doronz88 released this 21 Jul 07:38
· 336 commits to master since this release
b180e59

Highlights

✨ Much faster --userspace tunnel transfers via dynamic send-MSS

The userspace tunnel no longer caps host→device segments at a static 1340 bytes. Riding pmd-pytcp 0.2.0's fixed RFC 4821/8899 path probing, every connection starts at that same proven-safe size and raises its MSS only through packet sizes the device has actually ACKed — so each device/transport converges to its own real forwarding limit within a couple of seconds, with nothing hardcoded and a worst case equal to the old behavior on any device.

Measured on an iPhone 17,3 (iOS 26.5, USB), 100 MB afc transfers:

  • upload: 9.1 → ~25 MB/s (CLI wall time 16.1 s → 4.8 s)
  • download: ~65 → ~85 MB/s; DSC fetch-symbols: 63 → 79 MB/s
# no root needed — and now several times faster
pymobiledevice3 afc push --userspace big_file.bin big_file.bin
pymobiledevice3 developer fetch-symbols download --userspace ./symbols

The download-side gains come from pmd-pytcp's new runtime log gate (the pure-Python TCP stack no longer formats debug strings per packet when logging is off).

✨ Byte-scaled progress bars for afc push/pull

Single-file transfers over 4 MB now show a proper bytes progress bar with a live rate in both directions — handy as an ad-hoc transfer benchmark:

$ pymobiledevice3 afc push --userspace test.bin test.bin
test.bin:  52%|█████▏    | 52.0M/100M [00:04<00:03, 14.6MB/s]

pull's bar previously counted opaque 4 MB chunks; push had no bar at all and read the whole file into memory — it now streams in 4 MB chunks, which also removes the whole-file memory footprint for large uploads. AfcService.push() gains a progress_bar=True parameter mirroring pull()'s.

🐛 afc pull no longer demands --ignore-errors

A missing option default made typer treat --ignore-errors as required, breaking every plain afc pull <remote> <local>. Plain pulls work again (strict by default; -i opts into best-effort).

What's Changed

Full Changelog: v9.36.3...v9.37.0