Fix handling --preview-dart-2 for ios (#14016)

* Fix handling --preview-dart-2 for ios

* final var
diff --git a/packages/flutter_tools/lib/src/flx.dart b/packages/flutter_tools/lib/src/flx.dart
index d54ac1b..860ae1f 100644
--- a/packages/flutter_tools/lib/src/flx.dart
+++ b/packages/flutter_tools/lib/src/flx.dart
@@ -69,7 +69,7 @@
   }
 
   DevFSContent kernelContent;
-  if (!precompiledSnapshot && previewDart2) {
+  if (previewDart2) {
     final String kernelBinaryFilename = await compile(
       sdkRoot: artifacts.getArtifactPath(Artifact.flutterPatchedSdkPath),
       incrementalCompilerByteStorePath: fs.path.absolute(getIncrementalCompilerByteStoreDirectory()),
diff --git a/packages/flutter_tools/lib/src/ios/simulators.dart b/packages/flutter_tools/lib/src/ios/simulators.dart
index a1a9942..5747dfb 100644
--- a/packages/flutter_tools/lib/src/ios/simulators.dart
+++ b/packages/flutter_tools/lib/src/ios/simulators.dart
@@ -306,7 +306,7 @@
       printTrace('Building ${app.name} for $id.');
 
       try {
-        await _setupUpdatedApplicationBundle(app, debuggingOptions.buildInfo.flavor);
+        await _setupUpdatedApplicationBundle(app, debuggingOptions.buildInfo);
       } on ToolExit catch (e) {
         printError(e.message);
         return new LaunchResult.failed();
@@ -322,7 +322,7 @@
     if (!prebuiltApplication) {
       args.addAll(<String>[
         '--flutter-assets-dir=${fs.path.absolute(getAssetBuildDirectory())}',
-        '--dart-main=${fs.path.absolute(mainPath)}',
+        '--dart-main=${fs.path.absolute(mainPath)}${debuggingOptions.buildInfo.previewDart2?".dill":""}',
         '--packages=${fs.path.absolute('.packages')}',
       ]);
     }
@@ -379,17 +379,25 @@
     return criteria.reduce((bool a, bool b) => a && b);
   }
 
-  Future<Null> _setupUpdatedApplicationBundle(ApplicationPackage app, String flavor) async {
-    await _sideloadUpdatedAssetsForInstalledApplicationBundle(app);
+  Future<Null> _setupUpdatedApplicationBundle(ApplicationPackage app, BuildInfo buildInfo) async {
+    await _sideloadUpdatedAssetsForInstalledApplicationBundle(app, buildInfo);
 
     if (!await _applicationIsInstalledAndRunning(app))
-      return _buildAndInstallApplicationBundle(app, flavor);
+      return _buildAndInstallApplicationBundle(app, buildInfo);
   }
 
-  Future<Null> _buildAndInstallApplicationBundle(ApplicationPackage app, String flavor) async {
+  Future<Null> _buildAndInstallApplicationBundle(ApplicationPackage app, BuildInfo buildInfo) async {
     // Step 1: Build the Xcode project.
     // The build mode for the simulator is always debug.
-    final XcodeBuildResult buildResult = await buildXcodeProject(app: app, buildInfo: new BuildInfo(BuildMode.debug, flavor), buildForDevice: false);
+
+    final BuildInfo debugBuildInfo = new BuildInfo(BuildMode.debug, buildInfo.flavor,
+        previewDart2: buildInfo.previewDart2,
+        strongMode: buildInfo.strongMode,
+        extraFrontEndOptions: buildInfo.extraFrontEndOptions,
+        extraGenSnapshotOptions: buildInfo.extraGenSnapshotOptions,
+        preferSharedLibrary: buildInfo.preferSharedLibrary);
+
+    final XcodeBuildResult buildResult = await buildXcodeProject(app: app, buildInfo: debugBuildInfo, buildForDevice: false);
     if (!buildResult.success)
       throwToolExit('Could not build the application for the simulator.');
 
@@ -404,8 +412,8 @@
     await SimControl.instance.install(id, fs.path.absolute(bundle.path));
   }
 
-  Future<Null> _sideloadUpdatedAssetsForInstalledApplicationBundle(ApplicationPackage app) =>
-      flx.build(precompiledSnapshot: true);
+  Future<Null> _sideloadUpdatedAssetsForInstalledApplicationBundle(ApplicationPackage app, BuildInfo buildInfo) =>
+      flx.build(precompiledSnapshot: true, previewDart2: buildInfo.previewDart2, strongMode: buildInfo.strongMode);
 
   @override
   Future<bool> stopApp(ApplicationPackage app) async {
diff --git a/packages/flutter_tools/lib/src/runner/flutter_command_runner.dart b/packages/flutter_tools/lib/src/runner/flutter_command_runner.dart
index 38ddd96..0c7a455 100644
--- a/packages/flutter_tools/lib/src/runner/flutter_command_runner.dart
+++ b/packages/flutter_tools/lib/src/runner/flutter_command_runner.dart
@@ -341,8 +341,10 @@
       throwToolExit('No Flutter engine build found at $engineBuildPath.', exitCode: 2);
     }
 
-    final String hostLocalEngine = 'host_' + localEngine.substring(localEngine.indexOf('_') + 1);
-    final String engineHostBuildPath = fs.path.normalize(fs.path.join(enginePath, 'out', hostLocalEngine));
+    final String basename = fs.path.basename(engineBuildPath);
+    final String engineHostBuildPath = fs.path.normalize(fs.path.join(
+        fs.path.dirname(engineBuildPath),
+        'host_' + basename.substring(basename.indexOf('_') + 1)));
 
     return new EngineBuildPaths(targetEngine: engineBuildPath, hostEngine: engineHostBuildPath);
   }