pub fn parse_devicectl(json: &str) -> Result<Vec<DeviceHost>>Expand description
xcrun devicectl list devices --json-output → physical iOS hosts.
tunnelState == "unavailable" is read as unreachable (the device is not on
USB or the local network right now); any other state — disconnected
included — as launchable, because devicectl brings the tunnel up on demand
for a reachable device. That reading of disconnected is an inference from
devicectl’s behaviour, not a documented contract.