diff --git a/packages/flutter_tools/lib/src/ios/ios_workflow.dart b/packages/flutter_tools/lib/src/ios/ios_workflow.dart index 106a0e1ac1b..6c2026c6dfe 100644 --- a/packages/flutter_tools/lib/src/ios/ios_workflow.dart +++ b/packages/flutter_tools/lib/src/ios/ios_workflow.dart @@ -28,15 +28,7 @@ class IOSWorkflow extends Workflow { ); Function _xcodeExists = () { - if (xcode.isInstalledAndMeetsVersionCheck) { - return ValidationType.installed; - } - - if (xcode.isInstalled) { - return ValidationType.partial; - } - - return ValidationType.missing; + return xcode.isInstalled ? ValidationType.installed : ValidationType.missing; }; Function _xcodeVersionSatisfactory = () { @@ -47,6 +39,10 @@ class IOSWorkflow extends Workflow { return ValidationType.missing; }; + Function _xcodeEulaSigned = () { + return xcode.eulaSigned ? ValidationType.installed : ValidationType.missing; + }; + Function _brewExists = () { return exitsHappy(['brew', '-v']) ? ValidationType.installed : ValidationType.missing; @@ -71,12 +67,19 @@ class IOSWorkflow extends Workflow { iosValidator.addValidator(xcodeValidator); xcodeValidator.addValidator(new Validator( - 'Version Check', - description: 'Xcode version is at least $kXcodeRequiredVersionMajor.$kXcodeRequiredVersionMinor', + 'version', + description: 'Xcode minimum version of $kXcodeRequiredVersionMajor.$kXcodeRequiredVersionMinor.0', resolution: 'Download the latest version or update via the Mac App Store', validatorFunction: _xcodeVersionSatisfactory )); + xcodeValidator.addValidator(new Validator( + 'EULA', + description: 'XCode end user license agreement', + resolution: "Open XCode or run the command 'sudo xcodebuild -license'", + validatorFunction: _xcodeEulaSigned + )); + Validator brewValidator = new Validator( 'brew', description: 'install additional development packages', diff --git a/packages/flutter_tools/lib/src/ios/mac.dart b/packages/flutter_tools/lib/src/ios/mac.dart index ef95ce0ed37..e17cec57048 100644 --- a/packages/flutter_tools/lib/src/ios/mac.dart +++ b/packages/flutter_tools/lib/src/ios/mac.dart @@ -40,6 +40,23 @@ class XCode { return _isInstalled; } + /// Has the EULA been signed? + bool get eulaSigned { + if (!isInstalled) + return false; + + try { + ProcessResult result = Process.runSync('/usr/bin/xcrun', ['clang']); + if (result.stdout != null && result.stdout.contains('license')) + return false; + if (result.stderr != null && result.stderr.contains('license')) + return false; + return true; + } catch (error) { + return false; + } + } + bool _xcodeVersionSatisfactory; bool get xcodeVersionSatisfactory { if (_xcodeVersionSatisfactory != null) {