1// Copyright 2016 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5import '../base/context.dart'; 6import '../base/user_messages.dart'; 7import '../doctor.dart'; 8import 'xcode.dart'; 9 10XcodeValidator get xcodeValidator => context.get<XcodeValidator>(); 11 12class XcodeValidator extends DoctorValidator { 13 const XcodeValidator() : super('Xcode - develop for iOS and macOS'); 14 15 @override 16 Future<ValidationResult> validate() async { 17 final List<ValidationMessage> messages = <ValidationMessage>[]; 18 ValidationType xcodeStatus = ValidationType.missing; 19 String xcodeVersionInfo; 20 21 if (xcode.isInstalled) { 22 xcodeStatus = ValidationType.installed; 23 24 messages.add(ValidationMessage(userMessages.xcodeLocation(xcode.xcodeSelectPath))); 25 26 xcodeVersionInfo = xcode.versionText; 27 if (xcodeVersionInfo.contains(',')) 28 xcodeVersionInfo = xcodeVersionInfo.substring(0, xcodeVersionInfo.indexOf(',')); 29 messages.add(ValidationMessage(xcode.versionText)); 30 31 if (!xcode.isInstalledAndMeetsVersionCheck) { 32 xcodeStatus = ValidationType.partial; 33 messages.add(ValidationMessage.error( 34 userMessages.xcodeOutdated(kXcodeRequiredVersionMajor, kXcodeRequiredVersionMinor) 35 )); 36 } 37 38 if (!xcode.eulaSigned) { 39 xcodeStatus = ValidationType.partial; 40 messages.add(ValidationMessage.error(userMessages.xcodeEula)); 41 } 42 if (!xcode.isSimctlInstalled) { 43 xcodeStatus = ValidationType.partial; 44 messages.add(ValidationMessage.error(userMessages.xcodeMissingSimct)); 45 } 46 47 } else { 48 xcodeStatus = ValidationType.missing; 49 if (xcode.xcodeSelectPath == null || xcode.xcodeSelectPath.isEmpty) { 50 messages.add(ValidationMessage.error(userMessages.xcodeMissing)); 51 } else { 52 messages.add(ValidationMessage.error(userMessages.xcodeIncomplete)); 53 } 54 } 55 56 return ValidationResult(xcodeStatus, messages, statusInfo: xcodeVersionInfo); 57 } 58}