• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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}