Flutter `emulator launch` crash running in dart-2-mode (#19454)

* Only printError on our simple messages

Any other type is a real error that should be a normal crash (to get a proper error log).

See #19453.

* Add toList() to convert Iterable<String> -> List<String>

This code previously throw in Dart-2 mode.

Fixes #19453.

* Move getSimulatorPath into Xcode

* Add a test that we tried to launch the simulator

* Remove unused import
diff --git a/packages/flutter_tools/test/emulator_test.dart b/packages/flutter_tools/test/emulator_test.dart
index 9aad551..4286019 100644
--- a/packages/flutter_tools/test/emulator_test.dart
+++ b/packages/flutter_tools/test/emulator_test.dart
@@ -10,6 +10,8 @@
 import 'package:flutter_tools/src/base/config.dart';
 import 'package:flutter_tools/src/base/io.dart';
 import 'package:flutter_tools/src/emulator.dart';
+import 'package:flutter_tools/src/ios/ios_emulators.dart';
+import 'package:flutter_tools/src/ios/mac.dart';
 import 'package:mockito/mockito.dart';
 import 'package:process/process.dart';
 import 'package:test/test.dart';
@@ -21,11 +23,13 @@
   MockProcessManager mockProcessManager;
   MockConfig mockConfig;
   MockAndroidSdk mockSdk;
+  MockXcode mockXcode;
 
   setUp(() {
     mockProcessManager = new MockProcessManager();
     mockConfig = new MockConfig();
     mockSdk = new MockAndroidSdk();
+    mockXcode = new MockXcode();
 
     when(mockSdk.avdManagerPath).thenReturn('avdmanager');
     when(mockSdk.emulatorPath).thenReturn('emulator');
@@ -121,6 +125,30 @@
       AndroidSdk: () => mockSdk,
     });
   });
+
+  group('ios_emulators', () {
+    bool didAttemptToRunSimulator = false;
+    setUp(() {
+      when(mockXcode.xcodeSelectPath).thenReturn('/fake/Xcode.app/Contents/Developer');
+      when(mockXcode.getSimulatorPath()).thenAnswer((_) => '/fake/simulator.app');
+      when(mockProcessManager.run(any)).thenAnswer((Invocation invocation) async {
+        final List<String> args = invocation.positionalArguments[0];
+        if (args.length >= 3 && args[0] == 'open' && args[1] == '-a' && args[2] == '/fake/simulator.app') {
+          didAttemptToRunSimulator = true;
+        }
+        return new ProcessResult(101, 0, '', '');
+      });
+    });
+    testUsingContext('runs correct launch commands', () async {
+      final Emulator emulator = new IOSEmulator('ios');
+      await emulator.launch();
+      expect(didAttemptToRunSimulator, equals(true));
+    }, overrides: <Type, Generator>{
+      ProcessManager: () => mockProcessManager,
+      Config: () => mockConfig,
+      Xcode: () => mockXcode,
+    });
+  });
 }
 
 class TestEmulatorManager extends EmulatorManager {
@@ -230,3 +258,5 @@
     throw new ProcessException('emulator', args);
   }
 }
+
+class MockXcode extends Mock implements Xcode {}