idevice
Device Info & System

Companion Proxy

Query and listen for companion devices such as paired watches.

Companion Proxy exposes com.apple.companion_proxy through CompanionProxy. It reads companion registry values and starts or stops forwarded companion service ports.

Use It For

  • List companion devices.
  • Listen for companion attach and detach events.
  • Read values from a companion device.
  • Forward companion service ports.

Feature Flag

Cargo.toml
[dependencies]
idevice = { version = "0.1.64", features = ["usbmuxd", "companion_proxy"] }

Service Names

PathValue
Lockdowncom.apple.companion_proxy
RSDcom.apple.companion_proxy.shim.remote

Rust Example

src/main.rs
use idevice::{
    IdeviceService,
    companion_proxy::CompanionProxy,
};

let provider = first_provider().await?;
let mut client = CompanionProxy::connect(&provider).await?;
let registry = client.get_device_registry().await?;
println!("{registry:#?}");

CLI Equivalent

Terminal
idevice-tools companion_proxy list
idevice-tools companion_proxy listen
idevice-tools companion_proxy get <watch-udid> <key>

Common Errors

ErrorWhat to check
Service not foundThe device/iOS version does not advertise this service on the selected transport.
Connection failedCheck pairing, trust state, and whether the selected provider can reach the device.
Permission errorThe service requires a device state, entitlement, or developer setting that is not active.

Source

On this page