@@ -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,73 @@ 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+ final Directory ? flutterFrameworkSource;
912+ for (final Directory platformDirectory in xcframeworkDirectory.listSync ().whereType <Directory >()) {
897913 if (! platformDirectory.basename.startsWith ('ios-' )) {
898914 continue ;
899915 }
900916 // ios-x86_64-simulator, ios-arm64_x86_64-simulator, or ios-arm64.
901917 final bool simulatorDirectory = platformDirectory.basename.endsWith ('-simulator' );
902918 if ((environmentType == EnvironmentType .simulator && simulatorDirectory) ||
903919 (environmentType == EnvironmentType .physical && ! simulatorDirectory)) {
904- flutterFrameworkSource = platformDirectory;
920+ return platformDirectory;
905921 }
906922 }
907- if (flutterFrameworkSource == null ) {
908- throwToolExit ('No iOS frameworks found in ${xcframeworkDirectory .path }' );
909- }
923+ throwToolExit ('No iOS frameworks found in ${xcframeworkDirectory .path }' );
924+ }
910925
911- return flutterFrameworkSource
926+ /// Returns the path to Flutter.framework.
927+ String _getIosFrameworkPath (
928+ String engineDirectory,
929+ EnvironmentType ? environmentType,
930+ FileSystem fileSystem,
931+ Platform hostPlatform) {
932+ final Directory platformDir = _getIosFlutterFrameworkPlatformDirectory (
933+ engineDirectory,
934+ environmentType,
935+ fileSystem,
936+ hostPlatform,
937+ );
938+ return platformDir
912939 .childDirectory (_artifactToFileName (Artifact .flutterFramework, hostPlatform)! )
913940 .path;
914941}
915942
943+ /// Returns the path to Flutter.framework.dSYM.
944+ String _getIosFrameworkDsymPath (
945+ String engineDirectory,
946+ EnvironmentType ? environmentType,
947+ FileSystem fileSystem,
948+ Platform hostPlatform) {
949+ final Directory platformDir = _getIosFlutterFrameworkPlatformDirectory (
950+ engineDirectory,
951+ environmentType,
952+ fileSystem,
953+ hostPlatform,
954+ );
955+ return platformDir
956+ .childDirectory ('dSYMs' )
957+ .childDirectory (_artifactToFileName (Artifact .flutterFrameworkDsym, hostPlatform)! )
958+ .path;
959+ }
960+
916961String _getMacOSEngineArtifactPath (
917962 String engineDirectory,
918963 FileSystem fileSystem,
@@ -1108,7 +1153,10 @@ class CachedLocalEngineArtifacts implements Artifacts {
11081153 case Artifact .platformLibrariesJson:
11091154 return _fileSystem.path.join (_getFlutterPatchedSdkPath (mode), 'lib' , artifactFileName);
11101155 case Artifact .flutterFramework:
1111- return _getIosEngineArtifactPath (
1156+ return _getIosFrameworkPath (
1157+ localEngineInfo.targetOutPath, environmentType, _fileSystem, _platform);
1158+ case Artifact .flutterFrameworkDsym:
1159+ return _getIosFrameworkDsymPath (
11121160 localEngineInfo.targetOutPath, environmentType, _fileSystem, _platform);
11131161 case Artifact .flutterMacOSFramework:
11141162 return _getMacOSEngineArtifactPath (
@@ -1291,6 +1339,7 @@ class CachedLocalWebSdkArtifacts implements Artifacts {
12911339 case Artifact .genSnapshot:
12921340 case Artifact .flutterTester:
12931341 case Artifact .flutterFramework:
1342+ case Artifact .flutterFrameworkDsym:
12941343 case Artifact .flutterXcframework:
12951344 case Artifact .flutterMacOSFramework:
12961345 case Artifact .flutterMacOSXcframework:
0 commit comments