parsePhysicalDevices static method
Parses the JSON written by xcrun devicectl list devices -j into devices.
Pure function (no I/O) so it is unit-testable on any platform.
Implementation
static List<Device> parsePhysicalDevices(Map<String, dynamic> json) {
final result = json['result'] as Map<String, dynamic>? ?? {};
final deviceList = result['devices'] as List<dynamic>? ?? [];
final devices = <Device>[];
for (final d in deviceList) {
final map = d as Map<String, dynamic>;
final deviceProps =
map['deviceProperties'] as Map<String, dynamic>? ?? {};
final connectionProps =
map['connectionProperties'] as Map<String, dynamic>? ?? {};
final identifier = map['identifier'] as String? ?? '';
final name = deviceProps['name'] as String? ?? '';
final osVersion = deviceProps['osVersionNumber'] as String? ?? '';
final tunnelState = connectionProps['tunnelState'] as String?;
final isConnected = ![
'unavailable',
'disconnected',
].contains(tunnelState);
if (!isConnected) continue;
devices.add(
Device.ios(
id: identifier,
name: name,
platform: 'iOS $osVersion',
type: DeviceType.physical,
state: DeviceState.booted,
),
);
}
return devices;
}