diff --git a/.ci.yaml b/.ci.yaml
index 92961e6..5dc678b 100644
--- a/.ci.yaml
+++ b/.ci.yaml
@@ -5219,6 +5219,16 @@
         ["devicelab", "ios", "mac"]
       task_name: ios_defines_test
 
+  - name: Mac_ios hello_world_impeller_ios_sdfs
+    recipe: devicelab/devicelab_drone
+    presubmit: false
+    timeout: 60
+    bringup: true
+    properties:
+      tags: >
+        ["devicelab", "ios", "mac"]
+      task_name: hello_world_impeller_ios_sdfs
+
   - name: Mac_ios ios_platform_view_tests
     recipe: devicelab/devicelab_drone
     presubmit: false
diff --git a/TESTOWNERS b/TESTOWNERS
index a230c51..09c67e5 100644
--- a/TESTOWNERS
+++ b/TESTOWNERS
@@ -276,6 +276,7 @@
 /dev/devicelab/bin/tasks/gradle_plugin_bundle_test.dart @gmackall @flutter/plugin
 /dev/devicelab/bin/tasks/gradle_plugin_fat_apk_test.dart @gmackall @flutter/plugin
 /dev/devicelab/bin/tasks/gradle_plugin_light_apk_test.dart @gmackall @flutter/plugin
+/dev/devicelab/bin/tasks/hello_world_impeller_ios_sdfs.dart @gaaclarke @flutter/engine
 /dev/devicelab/bin/tasks/hello_world_macos__compile.dart @cbracken @flutter/desktop
 /dev/devicelab/bin/tasks/hello_world_macos_impeller_macos_sdfs.dart @b-luk @flutter/desktop
 /dev/devicelab/bin/tasks/hello_world_win_desktop__compile.dart @yaakovschectman @flutter/desktop
diff --git a/dev/devicelab/bin/tasks/hello_world_impeller_ios_sdfs.dart b/dev/devicelab/bin/tasks/hello_world_impeller_ios_sdfs.dart
new file mode 100644
index 0000000..65b237c
--- /dev/null
+++ b/dev/devicelab/bin/tasks/hello_world_impeller_ios_sdfs.dart
@@ -0,0 +1,145 @@
+// Copyright 2014 The Flutter Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+import 'dart:async';
+import 'dart:convert';
+import 'dart:io';
+
+import 'package:flutter_devicelab/framework/devices.dart';
+import 'package:flutter_devicelab/framework/framework.dart';
+import 'package:flutter_devicelab/framework/ios.dart';
+import 'package:flutter_devicelab/framework/task_result.dart';
+import 'package:flutter_devicelab/framework/utils.dart';
+import 'package:path/path.dart' as path;
+import 'package:xml/xml.dart';
+
+Future<TaskResult> run() async {
+  deviceOperatingSystem = DeviceOperatingSystem.ios;
+
+  final Directory appDir = dir(path.join(flutterDirectory.path, 'examples/hello_world'));
+  final String plistPath = path.join(appDir.path, 'ios', 'Runner', 'Info.plist');
+  final plistFile = File(plistPath);
+
+  if (!plistFile.existsSync()) {
+    return TaskResult.failure('Info.plist not found at $plistPath');
+  }
+
+  String? simulatorDeviceId;
+  var res = TaskResult.success(null);
+
+  try {
+    await testWithNewIOSSimulator('TestSDFsSim', (String deviceId) async {
+      simulatorDeviceId = deviceId;
+
+      await inDirectory(appDir, () async {
+        await flutter('packages', options: <String>['get']);
+
+        // Step 1: Test without flag
+        final Process process1 = await startFlutter(
+          'run',
+          options: <String>['--enable-impeller', '-d', deviceId],
+        );
+
+        final completer1 = Completer<void>();
+        var sawMetalMessage = false;
+
+        final StreamSubscription<String> subscription1 = process1.stdout
+            .transform(utf8.decoder)
+            .transform(const LineSplitter())
+            .listen((String line) {
+              print('[STDOUT 1]: $line');
+              if (line.contains('Using the Impeller rendering backend (Metal).')) {
+                sawMetalMessage = true;
+                if (!completer1.isCompleted) {
+                  completer1.complete();
+                }
+              }
+            });
+
+        await Future.any(<Future<void>>[
+          completer1.future,
+          Future<void>.delayed(const Duration(minutes: 2)),
+        ]);
+
+        process1.stdin.writeln('q');
+        await process1.exitCode;
+        await subscription1.cancel();
+
+        if (!sawMetalMessage) {
+          res = TaskResult.failure(
+            'Did not see "Using the Impeller rendering backend (Metal)." in output',
+          );
+          return; // Exit early if first step fails
+        }
+
+        // Step 2: Modify Info.plist to enable SDFS
+        final String xmlStr = plistFile.readAsStringSync();
+        final xmlDoc = XmlDocument.parse(xmlStr);
+        final XmlElement dictNode = xmlDoc.findAllElements('dict').first;
+
+        dictNode.children.add(
+          XmlElement(XmlName('key'), <XmlAttribute>[], <XmlNode>[
+            XmlText('FLTEnableSDFs'),
+          ], /*isSelfClosing=*/ false),
+        );
+        dictNode.children.add(XmlElement(XmlName('true')));
+
+        plistFile.writeAsStringSync(xmlDoc.toXmlString(pretty: true, indent: '    '));
+
+        // Run again with flag
+        final Process process2 = await startFlutter(
+          'run',
+          options: <String>['--enable-impeller', '-d', deviceId],
+        );
+
+        final completer2 = Completer<void>();
+        var sawSdfsMessage = false;
+
+        final StreamSubscription<String> subscription2 = process2.stdout
+            .transform(utf8.decoder)
+            .transform(const LineSplitter())
+            .listen((String line) {
+              print('[STDOUT 2]: $line');
+              if (line.contains('Using the Impeller rendering backend (MetalSDF).')) {
+                sawSdfsMessage = true;
+                if (!completer2.isCompleted) {
+                  completer2.complete();
+                }
+              }
+            });
+
+        await Future.any(<Future<void>>[
+          completer2.future,
+          Future<void>.delayed(const Duration(minutes: 2)),
+        ]);
+
+        process2.stdin.writeln('q');
+        await process2.exitCode;
+        await subscription2.cancel();
+
+        if (!sawSdfsMessage) {
+          res = TaskResult.failure(
+            'Did not see "Using the Impeller rendering backend (MetalSDF)." in output',
+          );
+        }
+      });
+    });
+  } catch (e) {
+    res = TaskResult.failure('Test failed with exception: $e');
+  } finally {
+    // Restore Info.plist
+    if (plistFile.existsSync()) {
+      await exec('git', <String>['checkout', plistPath]);
+    }
+    if (simulatorDeviceId != null) {
+      await removeIOSSimulator(simulatorDeviceId);
+    }
+  }
+
+  return res;
+}
+
+Future<void> main() async {
+  await task(run);
+}
diff --git a/engine/src/flutter/shell/platform/darwin/graphics/FlutterDarwinContextMetalImpeller.mm b/engine/src/flutter/shell/platform/darwin/graphics/FlutterDarwinContextMetalImpeller.mm
index b893da3..350ab38 100644
--- a/engine/src/flutter/shell/platform/darwin/graphics/FlutterDarwinContextMetalImpeller.mm
+++ b/engine/src/flutter/shell/platform/darwin/graphics/FlutterDarwinContextMetalImpeller.mm
@@ -39,6 +39,11 @@
   if (self != nil) {
     _context = CreateImpellerContext(flags, is_gpu_disabled_sync_switch);
     FML_CHECK(_context) << "Could not create Metal Impeller Context.";
+    if (flags.use_sdfs) {
+      FML_LOG(IMPORTANT) << "Using the Impeller rendering backend (MetalSDF).";
+    } else {
+      FML_LOG(IMPORTANT) << "Using the Impeller rendering backend (Metal).";
+    }
     id<MTLDevice> device = _context->GetMTLDevice();
     FML_CHECK(device) << "Could not acquire Metal device.";
 
