diff --git a/engine/src/flutter/shell/platform/darwin/ios/framework/Source/FlutterDartProject.mm b/engine/src/flutter/shell/platform/darwin/ios/framework/Source/FlutterDartProject.mm
index 3cab761d30b..c136cae373b 100644
--- a/engine/src/flutter/shell/platform/darwin/ios/framework/Source/FlutterDartProject.mm
+++ b/engine/src/flutter/shell/platform/darwin/ios/framework/Source/FlutterDartProject.mm
@@ -160,6 +160,13 @@ flutter::Settings FLTDefaultSettingsForBundle(NSBundle* bundle) {
NSNumber* enableSkParagraph = [mainBundle objectForInfoDictionaryKey:@"FLTEnableSkParagraph"];
settings.enable_skparagraph = (enableSkParagraph != nil) ? enableSkParagraph.boolValue : true;
+ // Whether to enable Impeller.
+ NSNumber* enableImpeller = [mainBundle objectForInfoDictionaryKey:@"FLTEnableImpeller"];
+ // Change the default only if the option is present.
+ if (enableImpeller != nil) {
+ settings.enable_impeller = enableImpeller.boolValue;
+ }
+
// Leak Dart VM settings, set whether leave or clean up the VM after the last shell shuts down.
NSNumber* leakDartVM = [mainBundle objectForInfoDictionaryKey:@"FLTLeakDartVM"];
// It will change the default leak_vm value in settings only if the key exists.
diff --git a/engine/src/flutter/shell/platform/darwin/ios/framework/Source/FlutterDartProjectTest.mm b/engine/src/flutter/shell/platform/darwin/ios/framework/Source/FlutterDartProjectTest.mm
index 234e4678e61..c899793e405 100644
--- a/engine/src/flutter/shell/platform/darwin/ios/framework/Source/FlutterDartProjectTest.mm
+++ b/engine/src/flutter/shell/platform/darwin/ios/framework/Source/FlutterDartProjectTest.mm
@@ -50,6 +50,17 @@ FLUTTER_ASSERT_ARC
XCTAssertEqual(settings.leak_vm, NO);
}
+- (void)testEnableImpellerSettingIsCorrectlyParsed {
+ // The FLTEnableImpeller's value is defined in Info.plist
+ NSBundle* mainBundle = [NSBundle mainBundle];
+ NSNumber* enableImpeller = [mainBundle objectForInfoDictionaryKey:@"FLTEnableImpeller"];
+ XCTAssertEqual(enableImpeller.boolValue, NO);
+
+ auto settings = FLTDefaultSettingsForBundle();
+ // Check settings.enable_impeller value is same as the value defined in Info.plist.
+ XCTAssertEqual(settings.enable_impeller, NO);
+}
+
- (void)testEmptySettingsAreCorrect {
XCTAssertFalse([FlutterDartProject allowsArbitraryLoads:[[NSDictionary alloc] init]]);
XCTAssertEqualObjects(@"", [FlutterDartProject domainNetworkPolicy:[[NSDictionary alloc] init]]);
diff --git a/engine/src/flutter/testing/ios/IosUnitTests/App/Info.plist b/engine/src/flutter/testing/ios/IosUnitTests/App/Info.plist
index dba0dc0a632..73bfcb252cd 100644
--- a/engine/src/flutter/testing/ios/IosUnitTests/App/Info.plist
+++ b/engine/src/flutter/testing/ios/IosUnitTests/App/Info.plist
@@ -46,6 +46,8 @@
FLTLeakDartVM
+ FLTEnableImpeller
+
UIRequiredDeviceCapabilities
armv7