iPhone Advanced — same WebUSB UI as idevice-rs. Sysdiagnose analysis is on iPhone (analyzer).
Everything runs in the browser via WebUSB + a Rust → WASM bundle.
Pick a device, generate or load a pair record, then run actions like
Battery / Diagnostics / Crash reports.
When the device sets EnableSessionSSL, the page negotiates lockdown
TLS with rustls using the host certificate chain
(same shape as the native idevice CLI / pymobiledevice3).
Diagnostics now runs ~40 GetValue queries grouped into
Identity, Network / cellular, Locale / time,
Activation / security, Storage, iTunes / sync and
Battery. Headline values are mirrored into the
Device snapshot card below; the full sectioned report stays in the
log for copy / paste.
On Linux, Chromium needs exclusive access to the USB interface — stop
usbmuxd briefly if claim fails. Verbose mode logs mux + pseudo-TCP frames
to the browser console ([idevice-wasm]).
Authorize one Apple device for this page. The browser scopes USB access per origin + serial.
A pair record holds a HostID + RSA host chain trusted by the device. Generate one (Trust prompt on first use) and save it for next time, or load an existing libimobiledevice / usbmuxd XML plist.
Random → fresh UUIDs each run (libimobiledevice / pymobiledevice3 style). Legacy → fixed HostID, useful if a device gets stuck on UUID handshakes.
Tip: unlock the iPhone first; the Trust prompt may take ~10–30 s.
Binary plists (bplist00) are not parsed; export as XML on macOS with plutil -convert xml1.
If TLS handshake fails, try a different client cert or SNI option.
Each action does QueryType → (Pair if needed) → StartSession → optional TLS → service call.
GetValuecom.apple.mobile.screenshotr · DeviceLink · PNG/TIFF · requires mounted Developer Disk Imagecom.apple.syslog_relay · live decoded text · filter / saveReads block on WebUSB until the device sends data — if the phone is silent, Stop only takes effect when the next syslog line arrives. Lock/unlock or open an app to flush the pipe.
com.apple.pcapd RVI · live decoder (Ethernet→IP→TCP/UDP/DNS/TLS-SNI) · saves a Wireshark .pcap
The whole .pcap file (libpcap, LINKTYPE_ETHERNET, snaplen 65535) is held in
memory — defaults are Max pcap bytes = 32 MiB, all other limits unbounded. The live
table only mounts the most recent ~500 rows for performance; older packets stay in the saved
.pcap and the in-page summary. Click any decoded row to expand its layered breakdown
(Ethernet / IPv4 / IPv6 / TCP / UDP / DNS / TLS / HTTP).
| # | t | dir | iface | process | flow | proto | len | info |
|---|
crashreportcopymobile AFC · probes DiagnosticLogs/sysdiagnose directly + full tree · per-archive downloadPress Vol Up + Vol Down + Side together for ~0.7 s (vibration). Wait ~5–10 minutes for the .tar.gz archive under DiagnosticLogs/sysdiagnose on the device. Note: stacks-*.ips crash reports are not the sysdiagnose archive; Mac Finder may show synced copies that are no longer on the phone.
| # | Name | Size |
|---|
To run SAF analysers on an archive, open iPhone (sysdiagnose) and use Analyze selected archive after listing.
crashreportmover + AFC crashreportcopymobile · per-file table with Save / Save allFiles are streamed into memory (cap ~32 MiB). On success a per-file table appears below the log with Save buttons.
Loading WASM…
| # | Name | Bytes |
|---|