diff --git a/packages/flutter_tools/lib/src/ios/mac.dart b/packages/flutter_tools/lib/src/ios/mac.dart
index fa229e0..20cc97a 100644
--- a/packages/flutter_tools/lib/src/ios/mac.dart
+++ b/packages/flutter_tools/lib/src/ios/mac.dart
@@ -76,6 +76,12 @@
   String _xcodeVersionText;
   String get xcodeVersionText => _xcodeVersionText;
 
+  int _xcodeMajorVersion;
+  int get xcodeMajorVersion => _xcodeMajorVersion;
+
+  int _xcodeMinorVersion;
+  int get xcodeMinorVersion => _xcodeMinorVersion;
+
   final RegExp xcodeVersionRegex = new RegExp(r'Xcode ([0-9.]+)');
 
   bool get xcodeVersionSatisfactory {
@@ -85,10 +91,10 @@
     String version = xcodeVersionRegex.firstMatch(xcodeVersionText).group(1);
     List<String> components = version.split('.');
 
-    int major = int.parse(components[0]);
-    int minor = components.length == 1 ? 0 : int.parse(components[1]);
+    _xcodeMajorVersion = int.parse(components[0]);
+    _xcodeMinorVersion = components.length == 1 ? 0 : int.parse(components[1]);
 
-    return _xcodeVersionCheckValid(major, minor);
+    return _xcodeVersionCheckValid(_xcodeMajorVersion, _xcodeMinorVersion);
   }
 }
 
diff --git a/packages/flutter_tools/lib/src/ios/simulators.dart b/packages/flutter_tools/lib/src/ios/simulators.dart
index 69143fd..ebf23f3 100644
--- a/packages/flutter_tools/lib/src/ios/simulators.dart
+++ b/packages/flutter_tools/lib/src/ios/simulators.dart
@@ -249,6 +249,10 @@
       args.addAll(launchArgs);
     runCheckedSync(args);
   }
+
+  void takeScreenshot(String outputPath) {
+    runCheckedSync(<String>[_xcrunPath, 'simctl', 'io', 'booted', 'screenshot', outputPath]);
+  }
 }
 
 /// Enumerates all data sections of `xcrun simctl list --json` command.
@@ -582,44 +586,18 @@
       logFile.writeAsBytesSync(<int>[]);
   }
 
-  @override
-  bool get supportsScreenshot => true;
+  bool get _xcodeVersionSupportsScreenshot {
+    return Xcode.instance.xcodeMajorVersion > 8 ||
+        (Xcode.instance.xcodeMajorVersion == 8 && Xcode.instance.xcodeMinorVersion >= 2);
+  }
 
   @override
-  Future<Null> takeScreenshot(File outputFile) async {
-    Directory desktopDir = fs.directory(fs.path.join(homeDirPath, 'Desktop'));
+  bool get supportsScreenshot => _xcodeVersionSupportsScreenshot;
 
-    // 'Simulator Screen Shot Mar 25, 2016, 2.59.43 PM.png'
-
-    Set<File> getScreenshots() {
-      return new Set<File>.from(desktopDir.listSync().where((FileSystemEntity entity) {
-        String name = fs.path.basename(entity.path);
-        return entity is File && name.startsWith('Simulator') && name.endsWith('.png');
-      }));
-    }
-
-    Set<File> existingScreenshots = getScreenshots();
-
-    runSync(<String>[
-      'osascript',
-      '-e',
-      'activate application "Simulator"\n'
-        'tell application "System Events" to keystroke "s" using command down'
-    ]);
-
-    // There is some latency here from the applescript call.
-    await new Future<Null>.delayed(new Duration(seconds: 1));
-
-    Set<File> shots = getScreenshots().difference(existingScreenshots);
-
-    if (shots.isEmpty) {
-      printError('Unable to locate the screenshot file.');
-      return false;
-    }
-
-    File shot = shots.first;
-    outputFile.writeAsBytesSync(shot.readAsBytesSync());
-    shot.delete();
+  @override
+  Future<Null> takeScreenshot(File outputFile) {
+    SimControl.instance.takeScreenshot(outputFile.path);
+    return new Future<Null>.value();
   }
 }
 
