How to inspect network requests of an iOS app on a real device
To inspect your own app’s requests on an iPhone, profile the app from Xcode with Instruments and choose the Network template. Its HTTP Traffic instrument records headers, bodies and timing for traffic through Apple’s URL Loading System. To capture the phone’s packet traffic, connect it by USB. Start a Remote Virtual Interface with rvictl -s <UDID>. Record rvi0 with tcpdump. TLS contents stay encrypted in that capture. To see which servers each app on the phone talks to, run mobster xray network --device "Test iPhone". It records traffic over the cable and lists app domains by company. Mobster never shows request paths, headers or bodies on a real iPhone.
See your app’s requests with Instruments
- Choose your iPhone as the run destination, then choose Product › Profile in Xcode.
- In Instruments, choose the Network template.
- Press Record. A dialog explains that Instruments stores captured HTTP traffic unencrypted. Choose Record Anyway, and your app launches.
The HTTP Traffic track groups requests by process, then by URLSession, then by domain. Switch a domain to HTTP Transactions by Connection, and the inspector shows the selected transaction’s request headers, response headers, and request and response bodies. Apple’s session on the instrument says it works on all Apple devices.
Name your sessions so you can find them in the trace:
let session = URLSession(configuration: .default)session.sessionDescription = "Main Session"To share a recording, export it as an HTTP Archive:
xcrun xctrace export --input App.trace --har --output App.harInstruments stores the traffic unencrypted, and it can hold credentials. Treat the trace and its HAR export as secrets.
Record every packet with rvictl
iOS doesn’t record a packet trace itself. Your Mac records one through a Remote Virtual Interface (RVI) while the iPhone is on a USB cable:
rvictl -s <UDID>sudo tcpdump -i rvi0 -w trace.pcaprvictl -s prints the interface it made: Starting device <UDID> [SUCCEEDED] with interface rvi0. Press ctrl+c to stop tcpdump, then run rvictl -x <UDID> to stop the interface. The trace holds all of the phone’s traffic, not only your app’s. Traffic sent over TLS stays encrypted in it.
Mobster runs the same tools with limits:
mobster phone network capture --device "Test iPhone" --output trace.pcap --seconds 60Set the capture duration with --seconds and its packet limit with --packets. Use --snaplen to set how much of each packet it keeps. It writes a file with permissions restricted to your user. tcpdump needs capture permission on your Mac. If a capture was killed, the next one removes the interface it left. Mobster exposes no task action or MCP tool for this capture.
See who each app talks to with Network X-ray
Network X-ray records the phone’s traffic over USB and turns it into a report per app:
mobster xray network --device "Test iPhone" --seconds 60A recording first prints Recording Test iPhone over the cable for 60 s. Use the apps you want to look at. ctrl+c stops early. Then it prints one line per app and where the report is.
- What it shows. Each app’s domains, the company that runs each, whether it does ads, analytics or attribution, and bytes sent and received, in
report.html,report.mdandnetxray.json. - How it names apps. It matches each process to an app on your phone by its executable name. Parts of iOS, such as
nsurlsessiond, show as iOS. Traffic with no process name goes under Unattributed, and Mobster doesn’t guess. - What it doesn’t show. It decrypts nothing, so you see who an app contacted and how much, never what it sent. Encrypted DNS, iCloud Private Relay and Encrypted Client Hello hide some server names.
- Where it runs. On a real iPhone on a cable. It refuses simulators.
--keep-capturekeeps the.pcapng, and--from FILE.pcapngreads one you already have, with no phone. - Where the data goes. The capture and report stay on your Mac. Mobster does not expose the report through MCP or Mobster Remote.
Which tool to use
| Tool | What it shows |
|---|---|
| Instruments, HTTP Traffic | Your app’s requests through Apple’s URL Loading System, with headers, bodies and timing |
rvictl and tcpdump | Every packet on the phone. TLS contents stay encrypted |
mobster xray network | Each app’s domains, companies and bytes, from one recording |
Recording a phone with Network X-ray needs Mobster for Mac, which is free. Reading a capture with --from needs no phone.
Questions
Can I see request bodies from an iOS app on a real iPhone?
For your own app, yes. Instruments' HTTP Traffic instrument records header and body content from the URL Loading System, and its inspector shows the request and response bodies of a transaction.
Does Network X-ray decrypt HTTPS?
No. It shows which domains an app contacted, the company behind each, and how much it sent and received. It never shows what the app sent.
Does Network X-ray work on a simulator?
No. It refuses simulators, because only a real iPhone has the capture service. It records the iPhone over its USB cable.


