parsePhysicalDevices static method

List<Device> parsePhysicalDevices(
  1. Map<String, dynamic> json
)

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;
}