From 294d7ea0cf0c6ff84ba43682b1dddcee18bf4114 Mon Sep 17 00:00:00 2001 From: Lau Ching Jun Date: Mon, 8 Apr 2019 12:37:43 -0700 Subject: [PATCH] Mark ios-deploy version 2.0.0 as bad (#30578) Mark ios-deploy version 2.0.0 as bad. ios-deploy before version 1.9.4 declares itself as v2.0.0 https://github.com/ios-control/ios-deploy/commits/master/src/ios-deploy/version.h --- .../flutter_tools/lib/src/ios/ios_workflow.dart | 6 +++++- .../test/ios/ios_workflow_test.dart | 16 ++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/packages/flutter_tools/lib/src/ios/ios_workflow.dart b/packages/flutter_tools/lib/src/ios/ios_workflow.dart index 675df0814c9..224c227db9f 100644 --- a/packages/flutter_tools/lib/src/ios/ios_workflow.dart +++ b/packages/flutter_tools/lib/src/ios/ios_workflow.dart @@ -52,6 +52,9 @@ class IOSValidator extends DoctorValidator { String get iosDeployMinimumVersion => '1.9.4'; + // ios-deploy <= v1.9.3 declares itself as v2.0.0 + List get iosDeployBadVersions => ['2.0.0']; + Future get iosDeployVersionText async => (await runAsync(['ios-deploy', '--version'])).processResult.stdout.replaceAll('\n', ''); bool get hasHomebrew => os.which('brew') != null; @@ -63,7 +66,8 @@ class IOSValidator extends DoctorValidator { return false; try { final Version version = Version.parse(await iosDeployVersionText); - return version >= Version.parse(iosDeployMinimumVersion); + return version >= Version.parse(iosDeployMinimumVersion) + && !iosDeployBadVersions.map((String v) => Version.parse(v)).contains(version); } on FormatException catch (_) { return false; } diff --git a/packages/flutter_tools/test/ios/ios_workflow_test.dart b/packages/flutter_tools/test/ios/ios_workflow_test.dart index 46926562a28..eafaa192ebd 100644 --- a/packages/flutter_tools/test/ios/ios_workflow_test.dart +++ b/packages/flutter_tools/test/ios/ios_workflow_test.dart @@ -230,6 +230,22 @@ Show information about a connected device. CocoaPods: () => cocoaPods, }); + testUsingContext('Emits partial status when ios-deploy version is a known bad version', () async { + when(xcode.isInstalled).thenReturn(true); + when(xcode.versionText) + .thenReturn('Xcode 8.2.1\nBuild version 8C1002\n'); + when(xcode.isInstalledAndMeetsVersionCheck).thenReturn(true); + when(xcode.eulaSigned).thenReturn(true); + when(xcode.isSimctlInstalled).thenReturn(true); + final IOSWorkflowTestTarget workflow = IOSWorkflowTestTarget(iosDeployVersionText: '2.0.0'); + final ValidationResult result = await workflow.validate(); + expect(result.type, ValidationType.partial); + }, overrides: { + IMobileDevice: () => iMobileDevice, + Xcode: () => xcode, + CocoaPods: () => cocoaPods, + }); + testUsingContext('Emits partial status when simctl is not installed', () async { when(xcode.isInstalled).thenReturn(true); when(xcode.versionText)