// Copyright 2014 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. import '../base/user_messages.dart'; import '../doctor_validator.dart'; import 'xcode.dart'; class XcodeValidator extends DoctorValidator { XcodeValidator({ required Xcode xcode, required UserMessages userMessages, }) : _xcode = xcode, _userMessages = userMessages, super('Xcode - develop for iOS and macOS'); final Xcode _xcode; final UserMessages _userMessages; @override Future<ValidationResult> validate() async { final List<ValidationMessage> messages = <ValidationMessage>[]; ValidationType xcodeStatus = ValidationType.missing; String? xcodeVersionInfo; final String? xcodeSelectPath = _xcode.xcodeSelectPath; if (_xcode.isInstalled) { xcodeStatus = ValidationType.installed; if (xcodeSelectPath != null) { messages.add(ValidationMessage(_userMessages.xcodeLocation(xcodeSelectPath))); } final String? versionText = _xcode.versionText; if (versionText != null) { messages.add(ValidationMessage(versionText)); } if (!_xcode.isInstalledAndMeetsVersionCheck) { xcodeStatus = ValidationType.partial; messages.add(ValidationMessage.error(_userMessages.xcodeOutdated( _xcode.currentVersion.toString(), xcodeRecommendedVersion.toString(), ))); } else if (!_xcode.isRecommendedVersionSatisfactory) { xcodeStatus = ValidationType.partial; messages.add(ValidationMessage.hint(_userMessages.xcodeOutdated( _xcode.currentVersion.toString(), xcodeRecommendedVersion.toString(), ))); } if (!_xcode.eulaSigned) { xcodeStatus = ValidationType.partial; messages.add(ValidationMessage.error(_userMessages.xcodeEula)); } if (!_xcode.isSimctlInstalled) { xcodeStatus = ValidationType.partial; messages.add(ValidationMessage.error(_userMessages.xcodeMissingSimct)); } } else { xcodeStatus = ValidationType.missing; if (xcodeSelectPath == null || xcodeSelectPath.isEmpty) { messages.add(ValidationMessage.error(_userMessages.xcodeMissing)); } else { messages.add(ValidationMessage.error(_userMessages.xcodeIncomplete)); } } return ValidationResult(xcodeStatus, messages, statusInfo: xcodeVersionInfo); } }