Skip to content

pymobiledevice3 patch index

Upstream pinned: see UPSTREAM_VERSION. Workflow and rationale are in README.md.

This file is the source of truth for what we have modified in pymobiledevice3. Every patch must have a row here. When we remove Python entirely, each row's Go-Rewrite-Note must have been addressed before the row (and the corresponding .patch file) disappears.

Active patches

0001 — iosmux spike: env-var override for advertised tunnel endpoint

  • Patch file: 0001-iosmux-spike-tunneld-endpoint-override.patch
  • Upstream files touched: pymobiledevice3/tunneld/server.py (the list_tunnels handler at the @app.get("/") route)
  • Activation: environment variable IOSMUX_SPIKE=1 on the tunneld process. Optional IOSMUX_SPIKE_PORT=<int> overrides the default port (34719). Unset = stock behavior.
  • Why: when active, the tunneld HTTP API response at / returns tunnel-address="::1" and tunnel-port=$IOSMUX_SPIKE_PORT instead of the real RSD endpoint. This lets us plant a local capture listener on [::1]:<port> and have CoreDeviceService connect there (thinking it's the iPhone tunnel), so we can observe the raw HTTP/2 bytes CDS emits. Needed for the Stage S2 Phase C self-experiment to resolve blockers X (protocol capture), Y (which CDS process actually opens the pair connection), and Z (SCM_RIGHTS sandbox probe) in one unified run.
  • Go-Rewrite-Note: Not needed in the Go port. This is a pure research/spike mechanism that exists only so the Go rewrite can be written against empirically-captured protocol bytes rather than guesses. When Python is removed, this patch disappears along with the rest of this directory. No production behavior depends on it.
  • Future-us note (not a Go-rewrite concern): the advertised address is currently hard-coded to IPv6 loopback ::1. If we ever want to run the spike listener on a different machine than the tunneld process (for example, to accept that pair-action network traffic from a remote CDS over a network segment), introduce an IOSMUX_SPIKE_ADDR env var alongside IOSMUX_SPIKE_PORT and thread it through the same conditional. Trivial extension; not needed for the current single-VM self-experiment.

Removed patches

None yet. When a patch is dropped, move its row here with a note on why it's no longer needed and the commit hash that removed it.