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