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.
usbmuxd --> lockdown1
usbmuxd --> lockdown2
application --> usbmuxd
subgraph Device["iOS Device 1"]
lockdown1 --> system_services1a["daemon A"]
lockdown1 --> system_services1b["daemon B"]
subgraph Device2["iOS Device 2"]
lockdown2 --> system_services2a["daemon A"]
lockdown2 --> system_services2b["daemon B"]
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
ideviceinfocommand-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
idevicescreenshotcommand-line utility connects to a the
screenshotrdaemon, and the
idevicesyslogcommand-line utility connects to the
syslogdaemon to capture all system logs
- To connect to a specific TCP port. For example, the
iproxycommand-line utility uses this to forward a all traffic between a TCP port on your PC to a TCP port on your device.