From bade5591bf2ca355e7c1c35327bfbf44a550d933 Mon Sep 17 00:00:00 2001 From: LouiseHsu Date: Wed, 23 Oct 2024 16:35:10 -0700 Subject: [PATCH] Prevent `flutter build ios-framework --xcframework` from copying `Flutter.xcframework.dSYM` into the `App.framework` folder. (#157394) Fixes https://github.com/flutter/flutter/issues/157359 Prevents Flutter.xcframework.dSYM from being copied into the App.framework folder. I am not 100% positive if there are cases where it's valid to have multiple dSYMs in that folder, so I'm just string matching and filtering out `Flutter.xcframework.dSYM` --- .../build_ios_framework_module_test.dart | 22 ++++++++++++++----- .../lib/src/commands/build_ios_framework.dart | 2 +- .../hermetic/build_darwin_framework_test.dart | 2 ++ 3 files changed, 19 insertions(+), 7 deletions(-) diff --git a/dev/devicelab/bin/tasks/build_ios_framework_module_test.dart b/dev/devicelab/bin/tasks/build_ios_framework_module_test.dart index fc9c07f32f..af6c85e8cf 100644 --- a/dev/devicelab/bin/tasks/build_ios_framework_module_test.dart +++ b/dev/devicelab/bin/tasks/build_ios_framework_module_test.dart @@ -188,15 +188,25 @@ Future _testBuildIosFramework(Directory projectDir, { bool isModule = fals 'vm_snapshot_data', )); + final String dsymPath = path.join( + outputPath, + mode, + 'App.xcframework', + 'ios-arm64', + 'dSYMs' + ); + checkDirectoryExists(dsymPath); + final String appFrameworkDsymPath = path.join( - outputPath, - mode, - 'App.xcframework', - 'ios-arm64', - 'dSYMs', - 'App.framework.dSYM' + dsymPath, + 'App.framework.dSYM' ); checkDirectoryExists(appFrameworkDsymPath); + + if (Directory(dsymPath).listSync().whereType().length != 1) { + throw TaskResult.failure('App.framework/dSYMs should ONLY contain App.xcframework.dSYM'); + } + await _checkDsym(path.join( appFrameworkDsymPath, 'Contents', diff --git a/packages/flutter_tools/lib/src/commands/build_ios_framework.dart b/packages/flutter_tools/lib/src/commands/build_ios_framework.dart index 1b4ddbb0ed..fc424ca9e1 100644 --- a/packages/flutter_tools/lib/src/commands/build_ios_framework.dart +++ b/packages/flutter_tools/lib/src/commands/build_ios_framework.dart @@ -150,7 +150,7 @@ abstract class BuildFrameworkCommand extends BuildSubCommand { ...framework.parent .listSync() .where((FileSystemEntity entity) => - entity.basename.endsWith('dSYM')) + entity.basename.endsWith('dSYM') && !entity.basename.startsWith('Flutter')) .map((FileSystemEntity entity) => ['-debug-symbols', entity.path]) .expand((List parameter) => parameter), ], diff --git a/packages/flutter_tools/test/commands.shard/hermetic/build_darwin_framework_test.dart b/packages/flutter_tools/test/commands.shard/hermetic/build_darwin_framework_test.dart index 605e1dff7e..1ee8e0a073 100644 --- a/packages/flutter_tools/test/commands.shard/hermetic/build_darwin_framework_test.dart +++ b/packages/flutter_tools/test/commands.shard/hermetic/build_darwin_framework_test.dart @@ -558,6 +558,8 @@ void main() { final Directory parentA = fileSystem.directory('FrameworkA')..createSync(); final File dSYMA = parentA.childFile('FrameworkA.framework.dSYM')..createSync(); final Directory frameworkA = parentA.childDirectory('FrameworkA.framework')..createSync(); + // Flutter.framework.dSYM should be correctly filtered out. + parentA.childFile('Flutter.framework.dSYM').createSync(); final Directory parentB = fileSystem.directory('FrameworkB')..createSync(); final File dSYMB = parentB.childFile('FrameworkB.framework.dSYM')..createSync();