diff --git a/dev/devicelab/bin/tasks/plugin_lint_mac.dart b/dev/devicelab/bin/tasks/plugin_lint_mac.dart index 37aadafc43..b92f422ce3 100644 --- a/dev/devicelab/bin/tasks/plugin_lint_mac.dart +++ b/dev/devicelab/bin/tasks/plugin_lint_mac.dart @@ -499,6 +499,13 @@ void _validateIosPodfile(String appPath) { 'test_plugin_swift', 'ios', )); + + // Make sure no Xcode build settings are leaking derived data/build directory into the ios directory. + checkDirectoryNotExists(path.join( + appPath, + 'ios', + 'build', + )); } void _validateMacOSPodfile(String appPath) { diff --git a/packages/flutter_tools/lib/src/ios/xcodeproj.dart b/packages/flutter_tools/lib/src/ios/xcodeproj.dart index 59b9daaf85..35fbb6e52b 100644 --- a/packages/flutter_tools/lib/src/ios/xcodeproj.dart +++ b/packages/flutter_tools/lib/src/ios/xcodeproj.dart @@ -228,6 +228,7 @@ class XcodeProjectInterpreter { return null; } final Status status = _logger.startSpinner(); + final String buildDirectory = _fileSystem.path.absolute(getIosBuildDirectory()); final List showBuildSettingsCommand = [ ...xcrunCommand(), 'xcodebuild', @@ -237,6 +238,8 @@ class XcodeProjectInterpreter { '-project', podXcodeProject.path, '-showBuildSettings', + 'BUILD_DIR=$buildDirectory', + 'OBJROOT=$buildDirectory', ]; try { // showBuildSettings is reported to occasionally timeout. Here, we give it diff --git a/packages/flutter_tools/templates/app_shared/ios.tmpl/.gitignore b/packages/flutter_tools/templates/app_shared/ios.tmpl/.gitignore index 151026b91b..7a7f9873ad 100644 --- a/packages/flutter_tools/templates/app_shared/ios.tmpl/.gitignore +++ b/packages/flutter_tools/templates/app_shared/ios.tmpl/.gitignore @@ -1,3 +1,4 @@ +**/dgph *.mode1v3 *.mode2v3 *.moved-aside diff --git a/packages/flutter_tools/templates/app_shared/macos.tmpl/.gitignore b/packages/flutter_tools/templates/app_shared/macos.tmpl/.gitignore index d2fd377230..746adbb6b9 100644 --- a/packages/flutter_tools/templates/app_shared/macos.tmpl/.gitignore +++ b/packages/flutter_tools/templates/app_shared/macos.tmpl/.gitignore @@ -3,4 +3,5 @@ **/Pods/ # Xcode-related +**/dgph **/xcuserdata/ diff --git a/packages/flutter_tools/test/general.shard/ios/xcodeproj_test.dart b/packages/flutter_tools/test/general.shard/ios/xcodeproj_test.dart index 275fc9ab88..52f478ef7d 100644 --- a/packages/flutter_tools/test/general.shard/ios/xcodeproj_test.dart +++ b/packages/flutter_tools/test/general.shard/ios/xcodeproj_test.dart @@ -695,6 +695,7 @@ Information about project "Runner": final Directory podXcodeProject = project.ios.hostAppRoot.childDirectory('Pods').childDirectory('Pods.xcodeproj') ..createSync(recursive: true); + final String buildDirectory = fileSystem.path.absolute('build', 'ios'); fakeProcessManager.addCommands([ kWhichSysctlCommand, kARMCheckCommand, @@ -710,6 +711,8 @@ Information about project "Runner": '-project', podXcodeProject.path, '-showBuildSettings', + 'BUILD_DIR=$buildDirectory', + 'OBJROOT=$buildDirectory', ], stdout: ''' Build settings for action build and target plugin1: @@ -748,6 +751,7 @@ Build settings for action build and target plugin2: final Directory podXcodeProject = project.ios.hostAppRoot.childDirectory('Pods').childDirectory('Pods.xcodeproj') ..createSync(recursive: true); + final String buildDirectory = fileSystem.path.absolute('build', 'ios'); fakeProcessManager.addCommands([ kWhichSysctlCommand, kARMCheckCommand, @@ -763,6 +767,8 @@ Build settings for action build and target plugin2: '-project', podXcodeProject.path, '-showBuildSettings', + 'BUILD_DIR=$buildDirectory', + 'OBJROOT=$buildDirectory', ], exitCode: 1, ), @@ -789,6 +795,7 @@ Build settings for action build and target plugin2: final Directory podXcodeProject = project.ios.hostAppRoot.childDirectory('Pods').childDirectory('Pods.xcodeproj') ..createSync(recursive: true); + final String buildDirectory = fileSystem.path.absolute('build', 'ios'); fakeProcessManager.addCommands([ kWhichSysctlCommand, kARMCheckCommand, @@ -804,6 +811,8 @@ Build settings for action build and target plugin2: '-project', podXcodeProject.path, '-showBuildSettings', + 'BUILD_DIR=$buildDirectory', + 'OBJROOT=$buildDirectory', ], stdout: ''' Build settings for action build and target plugin1: