parseSimulators static method

List<Device> parseSimulators(
  1. String jsonStr
)

Parses the JSON output of xcrun simctl list devices -j into devices. Pure function (no I/O) so it is unit-testable on any platform.

Implementation

static List<Device> parseSimulators(String jsonStr) {
  final json = jsonDecode(jsonStr) as Map<String, dynamic>;
  final devicesMap = json['devices'] as Map<String, dynamic>? ?? {};
  final devices = <Device>[];

  for (final entry in devicesMap.entries) {
    final runtime = entry.key;
    final platformName = extractPlatformName(runtime);
    final deviceList = entry.value as List<dynamic>;

    for (final d in deviceList) {
      final map = d as Map<String, dynamic>;
      if (map['isAvailable'] == true) {
        devices.add(
          Device.ios(
            id: map['udid'] as String,
            name: map['name'] as String,
            platform: platformName,
            type: DeviceType.simulator,
            state: DeviceState.fromString(
              map['state'] as String? ?? DeviceState.shutdown.label,
            ),
          ),
        );
      }
    }
  }

  return devices;
}