listSimulators function
Lists every simulator known to simctl via simctl list devices -j.
Implementation
Future<SimulatorListing> listSimulators() async {
final String stdoutStr;
try {
final result = await Process.run(xcrunExecutable, ['simctl', 'list', 'devices', '-j']);
if (result.exitCode != 0) {
final err = (result.stderr as String).trim();
return (simulators: null, error: err.isNotEmpty ? err : 'simctl exited with code ${result.exitCode}');
}
stdoutStr = result.stdout as String;
} catch (e) {
return (simulators: null, error: 'Failed to run xcrun simctl: $e');
}
try {
final decoded = jsonDecode(stdoutStr) as Map<String, dynamic>;
final byRuntime = decoded['devices'] as Map<String, dynamic>;
final simulators = <SimulatorDevice>[
for (final entry in byRuntime.entries)
for (final device in (entry.value as List<dynamic>).cast<Map<String, dynamic>>())
(
udid: device['udid'] as String,
name: device['name'] as String? ?? 'unknown',
state: device['state'] as String? ?? 'unknown',
runtime: entry.key,
),
];
return (simulators: simulators, error: null);
} catch (e) {
return (simulators: null, error: 'Could not parse `xcrun simctl list devices -j` output: $e');
}
}