[flutter_tools] iOS VM Service logs should include stderr (#58551)

diff --git a/packages/flutter_tools/lib/src/ios/devices.dart b/packages/flutter_tools/lib/src/ios/devices.dart
index a381c5c..125b293 100644
--- a/packages/flutter_tools/lib/src/ios/devices.dart
+++ b/packages/flutter_tools/lib/src/ios/devices.dart
@@ -655,16 +655,25 @@
       return;
     }
     try {
-      await connectedVmService.streamListen('Stdout');
+      await Future.wait(<Future<void>>[
+        connectedVmService.streamListen(vm_service.EventStreams.kStdout),
+        connectedVmService.streamListen(vm_service.EventStreams.kStderr),
+      ]);
     } on vm_service.RPCError {
       // Do nothing, since the tool is already subscribed.
     }
-    _loggingSubscriptions.add(connectedVmService.onStdoutEvent.listen((vm_service.Event event) {
+
+    void logMessage(vm_service.Event event) {
       final String message = utf8.decode(base64.decode(event.bytes));
       if (message.isNotEmpty) {
         _linesController.add(message);
       }
-    }));
+    }
+
+    _loggingSubscriptions.addAll(<StreamSubscription<void>>[
+      connectedVmService.onStdoutEvent.listen(logMessage),
+      connectedVmService.onStderrEvent.listen(logMessage),
+    ]);
   }
 
   void _listenToSysLog() {
diff --git a/packages/flutter_tools/test/general.shard/ios/ios_device_logger_test.dart b/packages/flutter_tools/test/general.shard/ios/ios_device_logger_test.dart
index bf2d789..bd95e87 100644
--- a/packages/flutter_tools/test/general.shard/ios/ios_device_logger_test.dart
+++ b/packages/flutter_tools/test/general.shard/ios/ios_device_logger_test.dart
@@ -153,25 +153,42 @@
         logger: logger,
       ),
     );
-    final StreamController<Event> controller = StreamController<Event>();
+    final StreamController<Event> stdoutController = StreamController<Event>();
+    final StreamController<Event> stderController = StreamController<Event>();
     final Completer<Success> stdoutCompleter = Completer<Success>();
+    final Completer<Success> stderrCompleter = Completer<Success>();
     when(vmService.streamListen('Stdout')).thenAnswer((Invocation invocation) {
       return stdoutCompleter.future;
     });
+    when(vmService.streamListen('Stderr')).thenAnswer((Invocation invocation) {
+      return stderrCompleter.future;
+    });
     when(vmService.onStdoutEvent).thenAnswer((Invocation invocation) {
-      return controller.stream;
+      return stdoutController.stream;
+    });
+    when(vmService.onStderrEvent).thenAnswer((Invocation invocation) {
+      return stderController.stream;
     });
     logReader.connectedVMService = vmService;
 
     stdoutCompleter.complete(Success());
-    controller.add(Event(
+    stderrCompleter.complete(Success());
+    stdoutController.add(Event(
       kind: 'Stdout',
       timestamp: 0,
       bytes: base64.encode(utf8.encode('  This is a message ')),
     ));
+    stderController.add(Event(
+      kind: 'Stderr',
+      timestamp: 0,
+      bytes: base64.encode(utf8.encode('  And this is an error ')),
+    ));
 
     // Wait for stream listeners to fire.
-    await expectLater(logReader.logLines, emits('  This is a message '));
+    await expectLater(logReader.logLines, emitsInAnyOrder(<Matcher>[
+      equals('  This is a message '),
+      equals('  And this is an error '),
+    ]));
   });
 }