// Copyright 2018 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. import 'dart:async'; import '../base/platform.dart'; import '../base/process.dart'; import '../emulator.dart'; import '../globals.dart'; import '../ios/mac.dart'; import 'ios_workflow.dart'; class IOSEmulators extends EmulatorDiscovery { @override bool get supportsPlatform => platform.isMacOS; @override bool get canListAnything => iosWorkflow.canListEmulators; @override Future<List<Emulator>> get emulators async => getEmulators(); } class IOSEmulator extends Emulator { IOSEmulator(String id) : super(id, true); @override String get name => 'iOS Simulator'; @override String get manufacturer => 'Apple'; @override String get label => null; @override Future<void> launch() async { Future<bool> launchSimulator(List<String> additionalArgs) async { final List<String> args = <String>['open'] .followedBy(additionalArgs) .followedBy(<String>['-a', xcode.getSimulatorPath()]) .toList(); final RunResult launchResult = await runAsync(args); if (launchResult.exitCode != 0) { printError('$launchResult'); return false; } return true; } // First run with `-n` to force a device to boot if there isn't already one if (!await launchSimulator(<String>['-n'])) return; // Run again to force it to Foreground (using -n doesn't force existing // devices to the foreground) await launchSimulator(<String>[]); } } /// Return the list of iOS Simulators (there can only be zero or one). List<IOSEmulator> getEmulators() { final String simulatorPath = xcode.getSimulatorPath(); if (simulatorPath == null) { return <IOSEmulator>[]; } return <IOSEmulator>[new IOSEmulator('apple_ios_simulator')]; }