Ad-hoc codesign Flutter.framework when code signing is disabled (#93556)

diff --git a/packages/flutter_tools/lib/src/build_system/targets/ios.dart b/packages/flutter_tools/lib/src/build_system/targets/ios.dart
index e92cbd0..e6a8e64 100644
--- a/packages/flutter_tools/lib/src/build_system/targets/ios.dart
+++ b/packages/flutter_tools/lib/src/build_system/targets/ios.dart
@@ -625,9 +625,9 @@
 }
 
 void _signFramework(Environment environment, String binaryPath, BuildMode buildMode) {
-  final String codesignIdentity = environment.defines[kCodesignIdentity];
+  String codesignIdentity = environment.defines[kCodesignIdentity];
   if (codesignIdentity == null || codesignIdentity.isEmpty) {
-    return;
+    codesignIdentity = '-';
   }
   final ProcessResult result = environment.processManager.runSync(<String>[
     'codesign',
diff --git a/packages/flutter_tools/test/general.shard/build_system/targets/ios_test.dart b/packages/flutter_tools/test/general.shard/build_system/targets/ios_test.dart
index fe30517..6045862 100644
--- a/packages/flutter_tools/test/general.shard/build_system/targets/ios_test.dart
+++ b/packages/flutter_tools/test/general.shard/build_system/targets/ios_test.dart
@@ -72,7 +72,8 @@
   testUsingContext('DebugUniversalFramework creates simulator binary', () async {
     environment.defines[kIosArchs] = 'x86_64';
     environment.defines[kSdkRoot] = 'path/to/iPhoneSimulator.sdk';
-    processManager.addCommand(
+    final String appFrameworkPath = environment.buildDir.childDirectory('App.framework').childFile('App').path;
+    processManager.addCommands(<FakeCommand>[
       FakeCommand(command: <String>[
         'xcrun',
         'clang',
@@ -98,12 +99,17 @@
         '-isysroot',
         'path/to/iPhoneSimulator.sdk',
         '-o',
-        environment.buildDir
-            .childDirectory('App.framework')
-            .childFile('App')
-            .path,
+        appFrameworkPath,
       ]),
-    );
+      FakeCommand(command: <String>[
+        'codesign',
+        '--force',
+        '--sign',
+        '-',
+        '--timestamp=none',
+        appFrameworkPath,
+      ]),
+    ]);
 
     await const DebugUniversalFramework().build(environment);
     expect(processManager.hasRemainingExpectations, isFalse);
@@ -116,7 +122,8 @@
   testUsingContext('DebugUniversalFramework creates expected binary with arm64 only arch', () async {
     environment.defines[kIosArchs] = 'arm64';
     environment.defines[kSdkRoot] = 'path/to/iPhoneOS.sdk';
-    processManager.addCommand(
+    final String appFrameworkPath = environment.buildDir.childDirectory('App.framework').childFile('App').path;
+    processManager.addCommands(<FakeCommand>[
       FakeCommand(command: <String>[
         'xcrun',
         'clang',
@@ -129,12 +136,17 @@
             '.tmp_rand0', 'flutter_tools_stub_source.rand0', 'debug_app.cc')),
         ..._kSharedConfig,
         '-o',
-        environment.buildDir
-            .childDirectory('App.framework')
-            .childFile('App')
-            .path,
+        appFrameworkPath,
       ]),
-    );
+      FakeCommand(command: <String>[
+        'codesign',
+        '--force',
+        '--sign',
+        '-',
+        '--timestamp=none',
+        appFrameworkPath,
+      ]),
+    ]);
 
     await const DebugUniversalFramework().build(environment);
     expect(processManager.hasRemainingExpectations, isFalse);
@@ -317,6 +329,7 @@
     FakeCommand lipoCommandNonFatResult;
     FakeCommand lipoVerifyArm64Command;
     FakeCommand bitcodeStripCommand;
+    FakeCommand adHocCodesignCommand;
 
     setUp(() {
       final FileSystem fileSystem = MemoryFileSystem.test();
@@ -353,6 +366,15 @@
         '-o',
         binary.path,
       ]);
+
+      adHocCodesignCommand = FakeCommand(command: <String>[
+        'codesign',
+        '--force',
+        '--sign',
+        '-',
+        '--timestamp=none',
+        binary.path,
+      ]);
     });
 
     testWithoutContext('iphonesimulator', () async {
@@ -389,6 +411,7 @@
           '-verify_arch',
           'x86_64',
         ]),
+        adHocCodesignCommand,
       ]);
       await const DebugUnpackIOS().build(environment);
 
@@ -538,6 +561,7 @@
         copyPhysicalFrameworkCommand,
         lipoCommandNonFatResult,
         lipoVerifyArm64Command,
+        adHocCodesignCommand,
       ]);
       await const DebugUnpackIOS().build(environment);
 
@@ -587,6 +611,7 @@
           'armv7',
           binary.path,
         ]),
+        adHocCodesignCommand,
       ]);
 
       await const DebugUnpackIOS().build(environment);
@@ -658,6 +683,7 @@
         lipoCommandNonFatResult,
         lipoVerifyArm64Command,
         bitcodeStripCommand,
+        adHocCodesignCommand,
       ]);
       await const DebugUnpackIOS().build(environment);