diff --git a/packages/flutter_tools/lib/src/build_info.dart b/packages/flutter_tools/lib/src/build_info.dart
index 78fcbf4..efa53c1 100644
--- a/packages/flutter_tools/lib/src/build_info.dart
+++ b/packages/flutter_tools/lib/src/build_info.dart
@@ -69,6 +69,24 @@
   assert(false);
 }
 
+TargetPlatform getTargetPlatformForName(String platform) {
+  switch (platform) {
+    case 'android-arm':
+      return TargetPlatform.android_arm;
+    case 'android-x64':
+      return TargetPlatform.android_x64;
+    case 'android-x86':
+      return TargetPlatform.android_x86;
+    case 'ios':
+      return TargetPlatform.ios;
+    case 'darwin-x64':
+      return TargetPlatform.darwin_x64;
+    case 'linux-x64':
+      return TargetPlatform.linux_x64;
+  }
+  return null;
+}
+
 HostPlatform getCurrentHostPlatform() {
   if (Platform.isMacOS)
     return HostPlatform.darwin_x64;
diff --git a/packages/flutter_tools/lib/src/commands/build_aot.dart b/packages/flutter_tools/lib/src/commands/build_aot.dart
index 408148a..3ebdbbd 100644
--- a/packages/flutter_tools/lib/src/commands/build_aot.dart
+++ b/packages/flutter_tools/lib/src/commands/build_aot.dart
@@ -25,7 +25,12 @@
     usesTargetOption();
     addBuildModeFlags();
     usesPubOption();
-    argParser.addOption('output-dir', defaultsTo: _kDefaultAotOutputDir);
+    argParser
+      ..addOption('output-dir', defaultsTo: _kDefaultAotOutputDir)
+      ..addOption('target-platform',
+        defaultsTo: 'android-arm',
+        allowed: <String>['android-arm', 'ios']
+      );
   }
 
   @override
@@ -36,9 +41,15 @@
 
   @override
   Future<int> runInProject() async {
+    String targetPlatform = argResults['target-platform'];
+    TargetPlatform platform = getTargetPlatformForName(targetPlatform);
+    if (platform == null) {
+      printError('Unknown platform: $targetPlatform');
+      return 1;
+    }
     String outputPath = buildAotSnapshot(
       findMainDartFile(argResults['target']),
-      TargetPlatform.android_arm,
+      platform,
       getBuildMode(),
       outputPath: argResults['output-dir']
     );
@@ -66,6 +77,11 @@
     return null;
   }
 
+  if (platform != TargetPlatform.android_arm && platform != TargetPlatform.ios) {
+    printError('${getNameForTargetPlatform(platform)} does not support AOT compilation.');
+    return null;
+  }
+
   String entryPointsDir, genSnapshot;
 
   String engineSrc = tools.engineSrcPath;
diff --git a/packages/flutter_tools/lib/src/commands/build_ios.dart b/packages/flutter_tools/lib/src/commands/build_ios.dart
index 80c9547..0b95ff6 100644
--- a/packages/flutter_tools/lib/src/commands/build_ios.dart
+++ b/packages/flutter_tools/lib/src/commands/build_ios.dart
@@ -22,7 +22,7 @@
   final String name = 'ios';
 
   @override
-  final String description = 'Build an iOS application bundle (Mac OSX host only).';
+  final String description = 'Build an iOS application bundle (Mac OS X host only).';
 
   @override
   Future<int> runInProject() async {
@@ -46,7 +46,7 @@
       printStatus('You will have to manually codesign before deploying to device.');
     }
 
-    String logTarget = forSimulator ? "simulator" : "device";
+    String logTarget = forSimulator ? 'simulator' : 'device';
 
     printStatus('Building $app for $logTarget...');
 
