From cb4b4d4ac93981d9f22aa17ce5e10b22346b4700 Mon Sep 17 00:00:00 2001 From: Chris Bracken Date: Mon, 25 Sep 2023 20:27:31 +0100 Subject: [PATCH] [macOS,iOS] Improve CocoaPods upgrade instructions (#135453) In our CocoaPods doctor check, if the version of CocoaPods is found to be too low, rather than emitting a link to the install instructions, emit a link to the upgrade instructions. Since this check operates on CocoaPodsStatus, an enum, swtich to using a case statement and cover all cases. ## Pre-launch Checklist - [X] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [X] I read the [Tree Hygiene] wiki page, which explains my responsibilities. - [X] I read and followed the [Flutter Style Guide], including [Features we expect every widget to implement]. - [X] I signed the [CLA]. - [ ] I listed at least one issue that this PR fixes in the description above. - [X] I updated/added relevant documentation (doc comments with `///`). - [X] I added new tests to check the change I am making, or this PR is [test-exempt]. - [X] All existing and new tests are passing. If you need help, consider asking for advice on the #hackers-new channel on [Discord]. [Contributor Guide]: https://github.com/flutter/flutter/wiki/Tree-hygiene#overview [Tree Hygiene]: https://github.com/flutter/flutter/wiki/Tree-hygiene [test-exempt]: https://github.com/flutter/flutter/wiki/Tree-hygiene#tests [Flutter Style Guide]: https://github.com/flutter/flutter/wiki/Style-guide-for-Flutter-repo [Features we expect every widget to implement]: https://github.com/flutter/flutter/wiki/Style-guide-for-Flutter-repo#features-we-expect-every-widget-to-implement [CLA]: https://cla.developers.google.com/ [flutter/tests]: https://github.com/flutter/tests [breaking change policy]: https://github.com/flutter/flutter/wiki/Tree-hygiene#handling-breaking-changes [Discord]: https://github.com/flutter/flutter/wiki/Chat --- .../lib/src/macos/cocoapods.dart | 2 ++ .../lib/src/macos/cocoapods_validator.dart | 21 ++++++++----------- .../macos/cocoapods_validator_test.dart | 1 + 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/packages/flutter_tools/lib/src/macos/cocoapods.dart b/packages/flutter_tools/lib/src/macos/cocoapods.dart index e675b50c5efa..c4e9b86e41ad 100644 --- a/packages/flutter_tools/lib/src/macos/cocoapods.dart +++ b/packages/flutter_tools/lib/src/macos/cocoapods.dart @@ -48,6 +48,8 @@ const String outOfDatePluginsPodfileConsequence = ''' const String cocoaPodsInstallInstructions = 'see https://guides.cocoapods.org/using/getting-started.html#installation for instructions.'; +const String cocoaPodsUpdateInstructions = 'see https://guides.cocoapods.org/using/getting-started.html#updating-cocoapods for instructions.'; + const String podfileIosMigrationInstructions = ''' rm ios/Podfile'''; diff --git a/packages/flutter_tools/lib/src/macos/cocoapods_validator.dart b/packages/flutter_tools/lib/src/macos/cocoapods_validator.dart index 56b16dbfd5b1..93fccd62e5ab 100644 --- a/packages/flutter_tools/lib/src/macos/cocoapods_validator.dart +++ b/packages/flutter_tools/lib/src/macos/cocoapods_validator.dart @@ -29,31 +29,28 @@ class CocoaPodsValidator extends DoctorValidator { .evaluateCocoaPodsInstallation; ValidationType status = ValidationType.success; - if (cocoaPodsStatus == CocoaPodsStatus.recommended) { - messages.add(ValidationMessage(_userMessages.cocoaPodsVersion((await _cocoaPods.cocoaPodsVersionText).toString()))); - } else { - if (cocoaPodsStatus == CocoaPodsStatus.notInstalled) { + switch (cocoaPodsStatus) { + case CocoaPodsStatus.recommended: + messages.add(ValidationMessage(_userMessages.cocoaPodsVersion((await _cocoaPods.cocoaPodsVersionText).toString()))); + case CocoaPodsStatus.notInstalled: status = ValidationType.missing; messages.add(ValidationMessage.error( _userMessages.cocoaPodsMissing(noCocoaPodsConsequence, cocoaPodsInstallInstructions))); - - } else if (cocoaPodsStatus == CocoaPodsStatus.brokenInstall) { + case CocoaPodsStatus.brokenInstall: status = ValidationType.missing; messages.add(ValidationMessage.error( _userMessages.cocoaPodsBrokenInstall(brokenCocoaPodsConsequence, cocoaPodsInstallInstructions))); - - } else if (cocoaPodsStatus == CocoaPodsStatus.unknownVersion) { + case CocoaPodsStatus.unknownVersion: status = ValidationType.partial; messages.add(ValidationMessage.hint( _userMessages.cocoaPodsUnknownVersion(unknownCocoaPodsConsequence, cocoaPodsInstallInstructions))); - } else { + case CocoaPodsStatus.belowMinimumVersion: + case CocoaPodsStatus.belowRecommendedVersion: status = ValidationType.partial; final String currentVersionText = (await _cocoaPods.cocoaPodsVersionText).toString(); messages.add(ValidationMessage.hint( - _userMessages.cocoaPodsOutdated(currentVersionText, cocoaPodsRecommendedVersion.toString(), noCocoaPodsConsequence, cocoaPodsInstallInstructions))); - } + _userMessages.cocoaPodsOutdated(currentVersionText, cocoaPodsRecommendedVersion.toString(), noCocoaPodsConsequence, cocoaPodsUpdateInstructions))); } - return ValidationResult(status, messages); } } diff --git a/packages/flutter_tools/test/general.shard/macos/cocoapods_validator_test.dart b/packages/flutter_tools/test/general.shard/macos/cocoapods_validator_test.dart index 1a5c24068366..22216ba9f8ad 100644 --- a/packages/flutter_tools/test/general.shard/macos/cocoapods_validator_test.dart +++ b/packages/flutter_tools/test/general.shard/macos/cocoapods_validator_test.dart @@ -41,6 +41,7 @@ void main() { expect(message.type, ValidationMessageType.hint); expect(message.message, contains('CocoaPods $currentVersion out of date')); expect(message.message, contains('(1.11.0 is recommended)')); + expect(message.message, contains('getting-started.html#updating-cocoapods')); }); }); }