mirror of
https://github.com/flutter/flutter
synced 2024-09-21 09:11:56 +00:00
Add support for iOS Simulator in flutter emulators
This commit is contained in:
parent
799678f0a7
commit
c0b2e78391
|
@ -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>[];
|
||||
|
|
76
packages/flutter_tools/lib/src/ios/ios_emulators.dart
Normal file
76
packages/flutter_tools/lib/src/ios/ios_emulators.dart
Normal 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,
|
||||
);
|
||||
}
|
Loading…
Reference in a new issue