[flutter_releases] Flutter Stable 2.2.1 Framework Cherrypicks (#83372)

* Remove extended attributes from entire Flutter project (#81435)
* roll engine cherrypicks

Co-authored-by: Jenn Magder <magder@google.com>
diff --git a/bin/internal/engine.version b/bin/internal/engine.version
index 3685d8b..1414ce1 100644
--- a/bin/internal/engine.version
+++ b/bin/internal/engine.version
@@ -1 +1 @@
-a9d88a4d182bdae23e3a4989abfb7ea25954aad1
+0fdb562ac8068ce3dda6b69aca3f355f4d1d2718
diff --git a/packages/flutter_tools/lib/src/ios/mac.dart b/packages/flutter_tools/lib/src/ios/mac.dart
index 2008da8..6261faa 100644
--- a/packages/flutter_tools/lib/src/ios/mac.dart
+++ b/packages/flutter_tools/lib/src/ios/mac.dart
@@ -121,7 +121,7 @@
     return XcodeBuildResult(success: false);
   }
 
-  await removeFinderExtendedAttributes(app.project.hostAppRoot, globals.processUtils, globals.logger);
+  await removeFinderExtendedAttributes(app.project.parent.directory, globals.processUtils, globals.logger);
 
   final XcodeProjectInfo projectInfo = await app.project.projectInfo();
   final String scheme = projectInfo.schemeFor(buildInfo);
@@ -471,19 +471,19 @@
 /// Extended attributes applied by Finder can cause code signing errors. Remove them.
 /// https://developer.apple.com/library/archive/qa/qa1940/_index.html
 @visibleForTesting
-Future<void> removeFinderExtendedAttributes(Directory iosProjectDirectory, ProcessUtils processUtils, Logger logger) async {
+Future<void> removeFinderExtendedAttributes(Directory projectDirectory, ProcessUtils processUtils, Logger logger) async {
   final bool success = await processUtils.exitsHappy(
     <String>[
       'xattr',
       '-r',
       '-d',
       'com.apple.FinderInfo',
-      iosProjectDirectory.path,
+      projectDirectory.path,
     ]
   );
   // Ignore all errors, for example if directory is missing.
   if (!success) {
-    logger.printTrace('Failed to remove xattr com.apple.FinderInfo from ${iosProjectDirectory.path}');
+    logger.printTrace('Failed to remove xattr com.apple.FinderInfo from ${projectDirectory.path}');
   }
 }
 
diff --git a/packages/flutter_tools/test/commands.shard/hermetic/build_ios_test.dart b/packages/flutter_tools/test/commands.shard/hermetic/build_ios_test.dart
index 1f613b4..ac6e41b 100644
--- a/packages/flutter_tools/test/commands.shard/hermetic/build_ios_test.dart
+++ b/packages/flutter_tools/test/commands.shard/hermetic/build_ios_test.dart
@@ -75,7 +75,7 @@
   }
 
   const FakeCommand xattrCommand = FakeCommand(command: <String>[
-    'xattr', '-r', '-d', 'com.apple.FinderInfo', '/ios'
+    'xattr', '-r', '-d', 'com.apple.FinderInfo', '/'
   ]);
 
   FakeCommand _setUpRsyncCommand({void Function() onRun}) {
diff --git a/packages/flutter_tools/test/commands.shard/hermetic/build_ipa_test.dart b/packages/flutter_tools/test/commands.shard/hermetic/build_ipa_test.dart
index 7168bb7..e016b81 100644
--- a/packages/flutter_tools/test/commands.shard/hermetic/build_ipa_test.dart
+++ b/packages/flutter_tools/test/commands.shard/hermetic/build_ipa_test.dart
@@ -76,7 +76,7 @@
   }
 
   const FakeCommand xattrCommand = FakeCommand(command: <String>[
-    'xattr', '-r', '-d', 'com.apple.FinderInfo', '/ios'
+    'xattr', '-r', '-d', 'com.apple.FinderInfo', '/'
   ]);
 
   // Creates a FakeCommand for the xcodebuild call to build the app
diff --git a/packages/flutter_tools/test/general.shard/ios/ios_device_start_nonprebuilt_test.dart b/packages/flutter_tools/test/general.shard/ios/ios_device_start_nonprebuilt_test.dart
index 658c0d5..2aad817 100644
--- a/packages/flutter_tools/test/general.shard/ios/ios_device_start_nonprebuilt_test.dart
+++ b/packages/flutter_tools/test/general.shard/ios/ios_device_start_nonprebuilt_test.dart
@@ -35,7 +35,7 @@
     '-r',
     '-d',
     'com.apple.FinderInfo',
-    flutterProject.ios.hostAppRoot.path,
+    flutterProject.directory.path,
   ];
 }
 
diff --git a/packages/flutter_tools/test/general.shard/ios/mac_test.dart b/packages/flutter_tools/test/general.shard/ios/mac_test.dart
index c306cbe..83be8fd 100644
--- a/packages/flutter_tools/test/general.shard/ios/mac_test.dart
+++ b/packages/flutter_tools/test/general.shard/ios/mac_test.dart
@@ -456,10 +456,10 @@
   });
 
   group('remove Finder extended attributes', () {
-    Directory iosProjectDirectory;
+    Directory projectDirectory;
     setUp(() {
       final MemoryFileSystem fs = MemoryFileSystem.test();
-      iosProjectDirectory = fs.directory('ios');
+      projectDirectory = fs.directory('flutter_project');
     });
 
     testWithoutContext('removes xattr', () async {
@@ -469,11 +469,11 @@
           '-r',
           '-d',
           'com.apple.FinderInfo',
-          iosProjectDirectory.path,
+          projectDirectory.path,
         ])
       ]);
 
-      await removeFinderExtendedAttributes(iosProjectDirectory, ProcessUtils(processManager: processManager, logger: logger), logger);
+      await removeFinderExtendedAttributes(projectDirectory, ProcessUtils(processManager: processManager, logger: logger), logger);
       expect(processManager, hasNoRemainingExpectations);
     });
 
@@ -484,12 +484,12 @@
           '-r',
           '-d',
           'com.apple.FinderInfo',
-          iosProjectDirectory.path,
+          projectDirectory.path,
         ], exitCode: 1,
         )
       ]);
 
-      await removeFinderExtendedAttributes(iosProjectDirectory, ProcessUtils(processManager: processManager, logger: logger), logger);
+      await removeFinderExtendedAttributes(projectDirectory, ProcessUtils(processManager: processManager, logger: logger), logger);
       expect(logger.traceText, contains('Failed to remove xattr com.apple.FinderInfo'));
       expect(processManager, hasNoRemainingExpectations);
     });