Add support for iOS Simulator in flutter emulators

This commit is contained in:
Danny Tuppeny 2018-04-18 15:33:31 +01:00 committed by Danny Tuppeny
parent 799678f0a7
commit c0b2e78391
2 changed files with 78 additions and 0 deletions

View file

@ -8,6 +8,7 @@ import 'dart:math' as math;
import 'android/android_emulator.dart';
import 'base/context.dart';
import 'globals.dart';
import 'ios/ios_emulators.dart';
EmulatorManager get emulatorManager => context[EmulatorManager];
@ -18,6 +19,7 @@ class EmulatorManager {
EmulatorManager() {
// Register the known discoverers.
_emulatorDiscoverers.add(new AndroidEmulators());
_emulatorDiscoverers.add(new IOSEmulators());
}
final List<EmulatorDiscovery> _emulatorDiscoverers = <EmulatorDiscovery>[];

View file

@ -0,0 +1,76 @@
// 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/file_system.dart';
import '../base/logger.dart';
import '../base/platform.dart';
import '../base/process.dart';
import '../emulator.dart';
import '../globals.dart';
import 'ios_workflow.dart';
// TODO: Is there a better name for this? We already have IOSSimulator classes
// that represent *running* simulators, but this is about "unlaunched images"...
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 => '';
@override
Future<bool> launch() async {
final Status status = logger.startProgress('Launching $id...');
final RunResult launchResult =
await runAsync(<String>['open', '-a', getSimulatorPath()]);
status.stop();
if (launchResult.exitCode != 0) {
printError(
'Error: iOS simulator failed to launch with exit code ${launchResult.exitCode}');
printError('$launchResult');
return false;
}
return true;
}
}
/// Return the list of iOS Simulators (there can only be zero or one).
List<IOSEmulator> getEmulators() {
final String simulatorPath = getSimulatorPath();
if (simulatorPath == null) {
return <IOSEmulator>[];
}
return <IOSEmulator>[new IOSEmulator('apple_ios_simulator')];
}
String getSimulatorPath() {
final List<String> searchPaths = <String>[
// TODO: Could this be anywhere else?
'/Applications/Xcode.app/Contents/Developer/Applications/Simulator.app',
];
return searchPaths.where((String p) => p != null).firstWhere(
(String p) => fs.directory(p).existsSync(),
orElse: () => null,
);
}