From ba5e237e24f1a40c6eec13faed40c23ffb29e0ea Mon Sep 17 00:00:00 2001 From: Jenn Magder Date: Thu, 11 Feb 2021 14:11:15 -0800 Subject: [PATCH] Avoid duplicating Pods-Runner xcconfig #includes (#75822) --- .../lib/src/macos/cocoapods.dart | 7 +++-- .../general.shard/macos/cocoapods_test.dart | 28 +++++++++++++++++++ 2 files changed, 32 insertions(+), 3 deletions(-) diff --git a/packages/flutter_tools/lib/src/macos/cocoapods.dart b/packages/flutter_tools/lib/src/macos/cocoapods.dart index de0106401a7..4544c9bd98f 100644 --- a/packages/flutter_tools/lib/src/macos/cocoapods.dart +++ b/packages/flutter_tools/lib/src/macos/cocoapods.dart @@ -274,9 +274,10 @@ class CocoaPods { final File file = xcodeProject.xcodeConfigFor(mode); if (file.existsSync()) { final String content = file.readAsStringSync(); - final String include = '#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.${mode - .toLowerCase()}.xcconfig"'; - if (!content.contains(include)) { + final String includeFile = 'Pods/Target Support Files/Pods-Runner/Pods-Runner.${mode + .toLowerCase()}.xcconfig'; + final String include = '#include? "$includeFile"'; + if (!content.contains(includeFile)) { file.writeAsStringSync('$include\n$content', flush: true); } } diff --git a/packages/flutter_tools/test/general.shard/macos/cocoapods_test.dart b/packages/flutter_tools/test/general.shard/macos/cocoapods_test.dart index dec5713c63c..3f7d6840b96 100644 --- a/packages/flutter_tools/test/general.shard/macos/cocoapods_test.dart +++ b/packages/flutter_tools/test/general.shard/macos/cocoapods_test.dart @@ -260,6 +260,34 @@ void main() { FileSystem: () => fileSystem, ProcessManager: () => FakeProcessManager.any(), }); + + testUsingContext('does not include Pod config in xcconfig files, if legacy non-option include present', () async { + projectUnderTest.ios.podfile..createSync()..writeAsStringSync('Existing Podfile'); + + const String legacyDebugInclude = '#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig'; + projectUnderTest.ios.xcodeConfigFor('Debug') + ..createSync(recursive: true) + ..writeAsStringSync(legacyDebugInclude); + const String legacyReleaseInclude = '#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig'; + projectUnderTest.ios.xcodeConfigFor('Release') + ..createSync(recursive: true) + ..writeAsStringSync(legacyReleaseInclude); + + final FlutterProject project = FlutterProject.fromPath('project'); + await cocoaPodsUnderTest.setupPodfile(project.ios); + + final String debugContents = projectUnderTest.ios.xcodeConfigFor('Debug').readAsStringSync(); + // Redundant contains check, but this documents what we're testing--that the optional + // #include? doesn't get written in addition to the previous style #include. + expect(debugContents, isNot(contains('#include?'))); + expect(debugContents, equals(legacyDebugInclude)); + final String releaseContents = projectUnderTest.ios.xcodeConfigFor('Release').readAsStringSync(); + expect(releaseContents, isNot(contains('#include?'))); + expect(releaseContents, equals(legacyReleaseInclude)); + }, overrides: { + FileSystem: () => fileSystem, + ProcessManager: () => FakeProcessManager.any(), + }); }); group('Update xcconfig', () {