Update logic for parsing sdk version number (#15918)

* add logic to parse 11.3 sim runtime major version

* add null aware and bump group number

* add comment describing version
diff --git a/packages/flutter_tools/lib/src/ios/simulators.dart b/packages/flutter_tools/lib/src/ios/simulators.dart
index f50aa5b..29e3a09 100644
--- a/packages/flutter_tools/lib/src/ios/simulators.dart
+++ b/packages/flutter_tools/lib/src/ios/simulators.dart
@@ -441,11 +441,11 @@
   @override
   Future<String> get sdkNameAndVersion async => category;
 
-  final RegExp _iosSdkRegExp = new RegExp(r'iOS (\d+)');
+  final RegExp _iosSdkRegExp = new RegExp(r'iOS( |-)(\d+)');
 
   Future<int> get sdkMajorVersion async {
     final Match sdkMatch = _iosSdkRegExp.firstMatch(await sdkNameAndVersion);
-    return int.parse(sdkMatch.group(1) ?? 11);
+    return int.parse(sdkMatch?.group(2) ?? 11);
   }
 
   @override
diff --git a/packages/flutter_tools/test/ios/simulators_test.dart b/packages/flutter_tools/test/ios/simulators_test.dart
index d717f96..dd2b599 100644
--- a/packages/flutter_tools/test/ios/simulators_test.dart
+++ b/packages/flutter_tools/test/ios/simulators_test.dart
@@ -94,6 +94,21 @@
     });
   });
 
+  group('sdkMajorVersion', () {
+    // This new version string appears in SimulatorApp-850 CoreSimulator-518.16 beta.
+    test('can be parsed from iOS-11-3', () async {
+      final IOSSimulator device = new IOSSimulator('x', name: 'iPhone SE', category: 'com.apple.CoreSimulator.SimRuntime.iOS-11-3');
+
+      expect(await device.sdkMajorVersion, 11);
+    });
+
+    test('can be parsed from iOS 11.2', () async {
+      final IOSSimulator device = new IOSSimulator('x', name: 'iPhone SE', category: 'iOS 11.2');
+
+      expect(await device.sdkMajorVersion, 11);
+    });
+  });
+
   group('IOSSimulator.isSupported', () {
     testUsingContext('Apple TV is unsupported', () {
       expect(new IOSSimulator('x', name: 'Apple TV').isSupported(), false);