From fe670c04cc14670870292471a3e1d0441745ae42 Mon Sep 17 00:00:00 2001 From: Jenn Magder Date: Wed, 22 Jul 2020 18:22:38 -0700 Subject: [PATCH] Only try to get build settings if the Xcode project exists (#61979) --- packages/flutter_tools/lib/src/project.dart | 2 +- .../flutter_tools/test/general.shard/project_test.dart | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/packages/flutter_tools/lib/src/project.dart b/packages/flutter_tools/lib/src/project.dart index 156d78ed97..045b1e6118 100644 --- a/packages/flutter_tools/lib/src/project.dart +++ b/packages/flutter_tools/lib/src/project.dart @@ -521,7 +521,7 @@ class IosProject extends FlutterProjectPlatform implements XcodeBasedProject { Map> _buildSettingsByScheme; Future projectInfo() async { - if (!existsSync() || !globals.xcodeProjectInterpreter.isInstalled) { + if (!xcodeProject.existsSync() || !globals.xcodeProjectInterpreter.isInstalled) { return null; } return _projectInfo ??= await globals.xcodeProjectInterpreter.getInfo(hostAppRoot.path); diff --git a/packages/flutter_tools/test/general.shard/project_test.dart b/packages/flutter_tools/test/general.shard/project_test.dart index de735a75b5..c67fb7da9f 100644 --- a/packages/flutter_tools/test/general.shard/project_test.dart +++ b/packages/flutter_tools/test/general.shard/project_test.dart @@ -332,6 +332,7 @@ apply plugin: 'kotlin-android' testWithMocks('from build settings, if no plist', () async { final FlutterProject project = await someProject(); + project.ios.xcodeProject.createSync(); when(mockXcodeProjectInterpreter.getBuildSettings(any, scheme: anyNamed('scheme'))).thenAnswer( (_) { return Future>.value({ @@ -362,6 +363,7 @@ apply plugin: 'kotlin-android' testWithMocks('from build settings and plist, if default variable', () async { final FlutterProject project = await someProject(); + project.ios.xcodeProject.createSync(); when(mockXcodeProjectInterpreter.getBuildSettings(any, scheme: anyNamed('scheme'))).thenAnswer( (_) { return Future>.value({ @@ -379,6 +381,7 @@ apply plugin: 'kotlin-android' testWithMocks('from build settings and plist, by substitution', () async { final FlutterProject project = await someProject(); + project.ios.xcodeProject.createSync(); project.ios.defaultHostInfoPlist.createSync(recursive: true); when(mockXcodeProjectInterpreter.getBuildSettings(any, scheme: anyNamed('scheme'))).thenAnswer( (_) { @@ -398,6 +401,7 @@ apply plugin: 'kotlin-android' testWithMocks('fails with no flavor and defined schemes', () async { final FlutterProject project = await someProject(); + project.ios.xcodeProject.createSync(); when(mockXcodeProjectInterpreter.getInfo(any, projectFilename: anyNamed('projectFilename'))).thenAnswer( (_) { return Future.value(XcodeProjectInfo([], [], ['free', 'paid'], logger)); }); @@ -409,6 +413,7 @@ apply plugin: 'kotlin-android' testWithMocks('handles case insensitive flavor', () async { final FlutterProject project = await someProject(); + project.ios.xcodeProject.createSync(); when(mockXcodeProjectInterpreter.getBuildSettings(any, scheme: anyNamed('scheme'))).thenAnswer( (_) { return Future>.value({ @@ -426,6 +431,7 @@ apply plugin: 'kotlin-android' testWithMocks('fails with flavor and default schemes', () async { final FlutterProject project = await someProject(); + project.ios.xcodeProject.createSync(); when(mockXcodeProjectInterpreter.getInfo(any, projectFilename: anyNamed('projectFilename'))).thenAnswer( (_) { return Future.value(XcodeProjectInfo([], [], ['Runner'], logger)); }); @@ -479,6 +485,7 @@ apply plugin: 'kotlin-android' testUsingContext('app product name xcodebuild settings', () async { final FlutterProject project = await someProject(); + project.ios.xcodeProject.createSync(); when(mockXcodeProjectInterpreter.getBuildSettings(any, scheme: anyNamed('scheme'))).thenAnswer((_) { return Future>.value({ 'FULL_PRODUCT_NAME': 'My App.app' @@ -648,6 +655,7 @@ apply plugin: 'kotlin-android' testUsingContext('has watch companion', () async { final FlutterProject project = await someProject(); + project.ios.xcodeProject.createSync(); project.ios.hostAppRoot.childDirectory('WatchTarget').childFile('Info.plist').createSync(recursive: true); when(mockPlistUtils.getValueFromFile(any, 'WKCompanionAppBundleIdentifier')).thenReturn('io.flutter.someProject');