create method

  1. @override
Future<void> create()
override

Creates a new version of the device. uuid is usually assigned by the platform within this method.

Implementation

@override
Future<void> create() async {
  final deviceTypes = await SimctlCli.instance.availableDeviceTypes();
  final deviceType = deviceTypes[model];
  if (deviceType == null) {
    throw StateError('$model is not available in ${deviceTypes.keys.join(", ")}');
  }

  final runtimes = await SimctlCli.instance.availableRuntimes();
  final runtimesForOs = runtimes[os.toString().split('.').last];
  if (runtimesForOs?.isEmpty ?? true) {
    throw StateError('No runtimes available for $osVersion');
  }

  final runtimeKey = runtimesForOs!.keys.firstWhere((e) => e == osVersion,
      orElse: () =>
          throw StateError('$osVersion is not available from ${runtimesForOs.keys.join(", ")}'));
  final runtime = runtimesForOs[runtimeKey]!;
  final deviceName =
      name ?? (await SimctlCli.instance.generateName(model: model!, osVersion: osVersion));

  final createdOutput =
      await runWithError('xcrun', ['simctl', 'create', deviceName, deviceType, runtime]);
  uuid = createdOutput.trim();
}