usbmuxd

How apps communicate with iOS devices

usbmuxd

Applications such as Xcode or iTunes interact with iOS devices. They can “see” iOS devices connected to your PC, and allow you to copy files, install applications, and more.

These applications don’t communicate directly with your iOS device. Instead, they open a connection to the usbmuxd daemon (on macOS or Linux) or the Apple Mobile Device Service (on Windows). For simplicity, we’ll always refer to this daemon or service as usbmuxd.

usbmuxd maintains a list of iOS devices which are connected to your PC, and also manages the trust relationship between the iOS device and your PC.

Applications can talk to usbmuxd using the usbmuxd protocol. This is a very simple protocol which allows applications to list which devices are currently connected to the PC, retrieve notifications when devices connect or disconnect, and connect directly to a device.

You can think of usbmuxd as a gateway service. You can ask it to set up a connection to a specific device, after which it does little more than forwarding all communications between you and the device.

graph LR; usbmuxd --> lockdown1 usbmuxd --> lockdown2 subgraph PC application --> usbmuxd end subgraph Device["iOS Device 1"] lockdown1 --> system_services1a["daemon A"] lockdown1 --> system_services1b["daemon B"] end subgraph Device2["iOS Device 2"] lockdown2 --> system_services2a["daemon A"] lockdown2 --> system_services2b["daemon B"] end

Lockdown

When usbmuxd connects you to a device, it sets you up with a connection to the lockdown service running on that device. You can use this service:

  • To get more information about the device. For example, the ideviceinfo command-line utility uses lockdown to retrieve information such as the device model or the version of iOS running on that device.
  • To connect to a daemon running on the device. For example, the idevicescreenshot command-line utility connects to a the screenshotr daemon, and the idevicesyslog command-line utility connects to the syslog daemon to capture all system logs
  • To connect to a specific TCP port. For example, the iproxy command-line utility uses this to forward a all traffic between a TCP port on your PC to a TCP port on your device.
Last modified October 30, 2019: Add Mermaid integration (83ee7b5)