@@ -22,6 +22,7 @@ enum Artifact {
2222 /// The flutter tester binary.
2323 flutterTester,
2424 flutterFramework,
25+ flutterFrameworkDsym,
2526 flutterXcframework,
2627 /// The framework directory of the macOS desktop.
2728 flutterMacOSFramework,
@@ -181,6 +182,8 @@ String? _artifactToFileName(Artifact artifact, Platform hostPlatform, [ BuildMod
181182 return 'flutter_tester$exe ' ;
182183 case Artifact .flutterFramework:
183184 return 'Flutter.framework' ;
185+ case Artifact .flutterFrameworkDsym:
186+ return 'Flutter.framework.dSYM' ;
184187 case Artifact .flutterXcframework:
185188 return 'Flutter.xcframework' ;
186189 case Artifact .flutterMacOSFramework:
@@ -623,6 +626,7 @@ class CachedArtifacts implements Artifacts {
623626 case Artifact .frontendServerSnapshotForEngineDartSdk:
624627 case Artifact .constFinder:
625628 case Artifact .flutterFramework:
629+ case Artifact .flutterFrameworkDsym:
626630 case Artifact .flutterMacOSFramework:
627631 case Artifact .flutterMacOSXcframework:
628632 case Artifact .flutterPatchedSdkPath:
@@ -656,7 +660,10 @@ class CachedArtifacts implements Artifacts {
656660 return _fileSystem.path.join (engineDir, artifactFileName);
657661 case Artifact .flutterFramework:
658662 final String engineDir = _getEngineArtifactsPath (platform, mode)! ;
659- return _getIosEngineArtifactPath (engineDir, environmentType, _fileSystem, _platform);
663+ return _getIosFrameworkPath (engineDir, environmentType, _fileSystem, _platform);
664+ case Artifact .flutterFrameworkDsym:
665+ final String engineDir = _getEngineArtifactsPath (platform, mode)! ;
666+ return _getIosFrameworkDsymPath (engineDir, environmentType, _fileSystem, _platform);
660667 case Artifact .engineDartSdkPath:
661668 case Artifact .engineDartBinary:
662669 case Artifact .engineDartAotRuntime:
@@ -713,6 +720,7 @@ class CachedArtifacts implements Artifacts {
713720 return _fileSystem.path.join (root, runtime, artifactFileName);
714721 case Artifact .constFinder:
715722 case Artifact .flutterFramework:
723+ case Artifact .flutterFrameworkDsym:
716724 case Artifact .flutterMacOSFramework:
717725 case Artifact .flutterMacOSXcframework:
718726 case Artifact .flutterTester:
@@ -814,6 +822,7 @@ class CachedArtifacts implements Artifacts {
814822 .childFile (_artifactToFileName (artifact, _platform, mode)! )
815823 .path;
816824 case Artifact .flutterFramework:
825+ case Artifact .flutterFrameworkDsym:
817826 case Artifact .flutterXcframework:
818827 case Artifact .fuchsiaFlutterRunner:
819828 case Artifact .fuchsiaKernelCompiler:
@@ -882,37 +891,72 @@ TargetPlatform _currentHostPlatform(Platform platform, OperatingSystemUtils oper
882891 throw UnimplementedError ('Host OS not supported.' );
883892}
884893
885- String _getIosEngineArtifactPath (String engineDirectory,
886- EnvironmentType ? environmentType, FileSystem fileSystem, Platform hostPlatform) {
894+ /// Returns the Flutter.xcframework platform directory for the specified environment type.
895+ ///
896+ /// `Flutter.xcframework` contains target environment/architecture-specific
897+ /// subdirectories containing the appropriate `Flutter.framework` and
898+ /// `dSYMs/Flutter.framework.dSYMs` bundles for that target architecture.
899+ Directory _getIosFlutterFrameworkPlatformDirectory (
900+ String engineDirectory,
901+ EnvironmentType ? environmentType,
902+ FileSystem fileSystem,
903+ Platform hostPlatform) {
887904 final Directory xcframeworkDirectory = fileSystem
888905 .directory (engineDirectory)
889906 .childDirectory (_artifactToFileName (Artifact .flutterXcframework, hostPlatform)! );
890907
891908 if (! xcframeworkDirectory.existsSync ()) {
892909 throwToolExit ('No xcframework found at ${xcframeworkDirectory .path }. Try running "flutter precache --ios".' );
893910 }
894- Directory ? flutterFrameworkSource;
895- for (final Directory platformDirectory
896- in xcframeworkDirectory.listSync ().whereType <Directory >()) {
911+ for (final Directory platformDirectory in xcframeworkDirectory.listSync ().whereType <Directory >()) {
897912 if (! platformDirectory.basename.startsWith ('ios-' )) {
898913 continue ;
899914 }
900915 // ios-x86_64-simulator, ios-arm64_x86_64-simulator, or ios-arm64.
901916 final bool simulatorDirectory = platformDirectory.basename.endsWith ('-simulator' );
902917 if ((environmentType == EnvironmentType .simulator && simulatorDirectory) ||
903918 (environmentType == EnvironmentType .physical && ! simulatorDirectory)) {
904- flutterFrameworkSource = platformDirectory;
919+ return platformDirectory;
905920 }
906921 }
907- if (flutterFrameworkSource == null ) {
908- throwToolExit ('No iOS frameworks found in ${xcframeworkDirectory .path }' );
909- }
922+ throwToolExit ('No iOS frameworks found in ${xcframeworkDirectory .path }' );
923+ }
910924
911- return flutterFrameworkSource
925+ /// Returns the path to Flutter.framework.
926+ String _getIosFrameworkPath (
927+ String engineDirectory,
928+ EnvironmentType ? environmentType,
929+ FileSystem fileSystem,
930+ Platform hostPlatform) {
931+ final Directory platformDir = _getIosFlutterFrameworkPlatformDirectory (
932+ engineDirectory,
933+ environmentType,
934+ fileSystem,
935+ hostPlatform,
936+ );
937+ return platformDir
912938 .childDirectory (_artifactToFileName (Artifact .flutterFramework, hostPlatform)! )
913939 .path;
914940}
915941
942+ /// Returns the path to Flutter.framework.dSYM.
943+ String _getIosFrameworkDsymPath (
944+ String engineDirectory,
945+ EnvironmentType ? environmentType,
946+ FileSystem fileSystem,
947+ Platform hostPlatform) {
948+ final Directory platformDir = _getIosFlutterFrameworkPlatformDirectory (
949+ engineDirectory,
950+ environmentType,
951+ fileSystem,
952+ hostPlatform,
953+ );
954+ return platformDir
955+ .childDirectory ('dSYMs' )
956+ .childDirectory (_artifactToFileName (Artifact .flutterFrameworkDsym, hostPlatform)! )
957+ .path;
958+ }
959+
916960String _getMacOSEngineArtifactPath (
917961 String engineDirectory,
918962 FileSystem fileSystem,
@@ -1108,7 +1152,10 @@ class CachedLocalEngineArtifacts implements Artifacts {
11081152 case Artifact .platformLibrariesJson:
11091153 return _fileSystem.path.join (_getFlutterPatchedSdkPath (mode), 'lib' , artifactFileName);
11101154 case Artifact .flutterFramework:
1111- return _getIosEngineArtifactPath (
1155+ return _getIosFrameworkPath (
1156+ localEngineInfo.targetOutPath, environmentType, _fileSystem, _platform);
1157+ case Artifact .flutterFrameworkDsym:
1158+ return _getIosFrameworkDsymPath (
11121159 localEngineInfo.targetOutPath, environmentType, _fileSystem, _platform);
11131160 case Artifact .flutterMacOSFramework:
11141161 return _getMacOSEngineArtifactPath (
@@ -1291,6 +1338,7 @@ class CachedLocalWebSdkArtifacts implements Artifacts {
12911338 case Artifact .genSnapshot:
12921339 case Artifact .flutterTester:
12931340 case Artifact .flutterFramework:
1341+ case Artifact .flutterFrameworkDsym:
12941342 case Artifact .flutterXcframework:
12951343 case Artifact .flutterMacOSFramework:
12961344 case Artifact .flutterMacOSXcframework:
0 commit comments