getPhysicalDevices method

  1. @override
Future<List<Device>> getPhysicalDevices()
override

Implementation

@override
Future<List<Device>> getPhysicalDevices() async {
  if (!Platform.isMacOS) return [];

  final tempDirectory = Directory.systemTemp;
  final outputFile = File('${tempDirectory.path}/ios_devices.json');

  try {
    final devicectl = await _exec.run(
      'xcrun',
      arguments: [
        'devicectl',
        'list',
        'devices',
        '--filter',
        "Reality = 'physical'",
        '-j',
        outputFile.path,
      ],
    );

    if (!devicectl.success) return [];

    final json =
        jsonDecode(await outputFile.readAsString()) as Map<String, dynamic>;

    return parsePhysicalDevices(json);
  } catch (e, st) {
    log('IOSDeviceService.getPhysicalDevices error: $e\n$st');
    return [];
  } finally {
    if (outputFile.existsSync()) {
      outputFile.deleteSync();
    }
  }
}