[local_auth] Update minimum Flutter version to 3.3 and iOS 11 (#3335)

diff --git a/packages/local_auth/local_auth/CHANGELOG.md b/packages/local_auth/local_auth/CHANGELOG.md
index ed16c45..9a243e8 100644
--- a/packages/local_auth/local_auth/CHANGELOG.md
+++ b/packages/local_auth/local_auth/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 2.1.6
+
+* Updates iOS minimum version in README.
+
 ## 2.1.5
 
 * Updates links for the merge of flutter/plugins into flutter/packages.
diff --git a/packages/local_auth/local_auth/README.md b/packages/local_auth/local_auth/README.md
index 8abf583..1fc9ce3 100644
--- a/packages/local_auth/local_auth/README.md
+++ b/packages/local_auth/local_auth/README.md
@@ -8,9 +8,9 @@
 On supported devices, this includes authentication with biometrics such as
 fingerprint or facial recognition.
 
-|             | Android   | iOS  | Windows     |
-|-------------|-----------|------|-------------|
-| **Support** | SDK 16+\* | 9.0+ | Windows 10+ |
+|             | Android   | iOS   | Windows     |
+|-------------|-----------|-------|-------------|
+| **Support** | SDK 16+\* | 11.0+ | Windows 10+ |
 
 ## Usage
 
diff --git a/packages/local_auth/local_auth/example/ios/Flutter/AppFrameworkInfo.plist b/packages/local_auth/local_auth/example/ios/Flutter/AppFrameworkInfo.plist
index 3a9c234..9b41e7d 100644
--- a/packages/local_auth/local_auth/example/ios/Flutter/AppFrameworkInfo.plist
+++ b/packages/local_auth/local_auth/example/ios/Flutter/AppFrameworkInfo.plist
@@ -25,6 +25,6 @@
     <string>arm64</string>
   </array>
   <key>MinimumOSVersion</key>
-  <string>9.0</string>
+  <string>11.0</string>
 </dict>
 </plist>
diff --git a/packages/local_auth/local_auth/example/ios/Podfile b/packages/local_auth/local_auth/example/ios/Podfile
index f7d6a5e..d207307 100644
--- a/packages/local_auth/local_auth/example/ios/Podfile
+++ b/packages/local_auth/local_auth/example/ios/Podfile
@@ -1,5 +1,5 @@
 # Uncomment this line to define a global platform for your project
-# platform :ios, '9.0'
+# platform :ios, '11.0'
 
 # CocoaPods analytics sends network stats synchronously affecting flutter build latency.
 ENV['COCOAPODS_DISABLE_STATS'] = 'true'
diff --git a/packages/local_auth/local_auth/example/ios/Runner.xcodeproj/project.pbxproj b/packages/local_auth/local_auth/example/ios/Runner.xcodeproj/project.pbxproj
index b40fbca..c10bc02 100644
--- a/packages/local_auth/local_auth/example/ios/Runner.xcodeproj/project.pbxproj
+++ b/packages/local_auth/local_auth/example/ios/Runner.xcodeproj/project.pbxproj
@@ -3,7 +3,7 @@
 	archiveVersion = 1;
 	classes = {
 	};
-	objectVersion = 46;
+	objectVersion = 54;
 	objects = {
 
 /* Begin PBXBuildFile section */
@@ -217,10 +217,12 @@
 /* Begin PBXShellScriptBuildPhase section */
 		3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
 			isa = PBXShellScriptBuildPhase;
+			alwaysOutOfDate = 1;
 			buildActionMask = 2147483647;
 			files = (
 			);
 			inputPaths = (
+				"${TARGET_BUILD_DIR}/${INFOPLIST_PATH}",
 			);
 			name = "Thin Binary";
 			outputPaths = (
@@ -231,6 +233,7 @@
 		};
 		9740EEB61CF901F6004384FC /* Run Script */ = {
 			isa = PBXShellScriptBuildPhase;
+			alwaysOutOfDate = 1;
 			buildActionMask = 2147483647;
 			files = (
 			);
@@ -344,7 +347,7 @@
 				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
 				GCC_WARN_UNUSED_FUNCTION = YES;
 				GCC_WARN_UNUSED_VARIABLE = YES;
-				IPHONEOS_DEPLOYMENT_TARGET = 9.0;
+				IPHONEOS_DEPLOYMENT_TARGET = 11.0;
 				MTL_ENABLE_DEBUG_INFO = YES;
 				ONLY_ACTIVE_ARCH = YES;
 				SDKROOT = iphoneos;
@@ -394,7 +397,7 @@
 				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
 				GCC_WARN_UNUSED_FUNCTION = YES;
 				GCC_WARN_UNUSED_VARIABLE = YES;
-				IPHONEOS_DEPLOYMENT_TARGET = 9.0;
+				IPHONEOS_DEPLOYMENT_TARGET = 11.0;
 				MTL_ENABLE_DEBUG_INFO = NO;
 				SDKROOT = iphoneos;
 				TARGETED_DEVICE_FAMILY = "1,2";
diff --git a/packages/local_auth/local_auth/example/ios/Runner/Info.plist b/packages/local_auth/local_auth/example/ios/Runner/Info.plist
index f8e0356..1af663b 100644
--- a/packages/local_auth/local_auth/example/ios/Runner/Info.plist
+++ b/packages/local_auth/local_auth/example/ios/Runner/Info.plist
@@ -47,5 +47,9 @@
 	<false/>
         <key>NSFaceIDUsageDescription</key>
         <string>App needs to authenticate using faces.</string>
+	<key>CADisableMinimumFrameDurationOnPhone</key>
+	<true/>
+	<key>UIApplicationSupportsIndirectInputEvents</key>
+	<true/>
 </dict>
 </plist>
diff --git a/packages/local_auth/local_auth/pubspec.yaml b/packages/local_auth/local_auth/pubspec.yaml
index bebdab4..3406485 100644
--- a/packages/local_auth/local_auth/pubspec.yaml
+++ b/packages/local_auth/local_auth/pubspec.yaml
@@ -3,7 +3,7 @@
   authentication via fingerprint, touch ID, face ID, passcode, pin, or pattern.
 repository: https://github.com/flutter/packages/tree/main/packages/local_auth/local_auth
 issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+local_auth%22
-version: 2.1.5
+version: 2.1.6
 
 environment:
   sdk: ">=2.14.0 <3.0.0"
diff --git a/packages/local_auth/local_auth_ios/CHANGELOG.md b/packages/local_auth/local_auth_ios/CHANGELOG.md
index ae383fb..74a1fac 100644
--- a/packages/local_auth/local_auth_ios/CHANGELOG.md
+++ b/packages/local_auth/local_auth_ios/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 1.1.0
+
+* Updates minimum Flutter version to 3.3 and iOS 11.
+
 ## 1.0.13
 
 * Updates links for the merge of flutter/plugins into flutter/packages.
diff --git a/packages/local_auth/local_auth_ios/example/ios/Flutter/AppFrameworkInfo.plist b/packages/local_auth/local_auth_ios/example/ios/Flutter/AppFrameworkInfo.plist
index 3a9c234..9b41e7d 100644
--- a/packages/local_auth/local_auth_ios/example/ios/Flutter/AppFrameworkInfo.plist
+++ b/packages/local_auth/local_auth_ios/example/ios/Flutter/AppFrameworkInfo.plist
@@ -25,6 +25,6 @@
     <string>arm64</string>
   </array>
   <key>MinimumOSVersion</key>
-  <string>9.0</string>
+  <string>11.0</string>
 </dict>
 </plist>
diff --git a/packages/local_auth/local_auth_ios/example/ios/Podfile b/packages/local_auth/local_auth_ios/example/ios/Podfile
index ee8f1d9..bd28680 100644
--- a/packages/local_auth/local_auth_ios/example/ios/Podfile
+++ b/packages/local_auth/local_auth_ios/example/ios/Podfile
@@ -1,5 +1,5 @@
 # Uncomment this line to define a global platform for your project
-# platform :ios, '9.0'
+# platform :ios, '11.0'
 
 # CocoaPods analytics sends network stats synchronously affecting flutter build latency.
 ENV['COCOAPODS_DISABLE_STATS'] = 'true'
diff --git a/packages/local_auth/local_auth_ios/example/ios/Runner.xcodeproj/project.pbxproj b/packages/local_auth/local_auth_ios/example/ios/Runner.xcodeproj/project.pbxproj
index cbf16ee..d563a52 100644
--- a/packages/local_auth/local_auth_ios/example/ios/Runner.xcodeproj/project.pbxproj
+++ b/packages/local_auth/local_auth_ios/example/ios/Runner.xcodeproj/project.pbxproj
@@ -3,7 +3,7 @@
 	archiveVersion = 1;
 	classes = {
 	};
-	objectVersion = 50;
+	objectVersion = 54;
 	objects = {
 
 /* Begin PBXBuildFile section */
@@ -282,10 +282,12 @@
 /* Begin PBXShellScriptBuildPhase section */
 		3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
 			isa = PBXShellScriptBuildPhase;
+			alwaysOutOfDate = 1;
 			buildActionMask = 2147483647;
 			files = (
 			);
 			inputPaths = (
+				"${TARGET_BUILD_DIR}/${INFOPLIST_PATH}",
 			);
 			name = "Thin Binary";
 			outputPaths = (
@@ -296,6 +298,7 @@
 		};
 		9740EEB61CF901F6004384FC /* Run Script */ = {
 			isa = PBXShellScriptBuildPhase;
+			alwaysOutOfDate = 1;
 			buildActionMask = 2147483647;
 			files = (
 			);
@@ -412,7 +415,7 @@
 				CODE_SIGN_STYLE = Automatic;
 				GCC_C_LANGUAGE_STANDARD = gnu11;
 				INFOPLIST_FILE = RunnerTests/Info.plist;
-				IPHONEOS_DEPLOYMENT_TARGET = 9.0;
+				IPHONEOS_DEPLOYMENT_TARGET = 11.0;
 				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
 				MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
 				MTL_FAST_MATH = YES;
@@ -436,7 +439,7 @@
 				CODE_SIGN_STYLE = Automatic;
 				GCC_C_LANGUAGE_STANDARD = gnu11;
 				INFOPLIST_FILE = RunnerTests/Info.plist;
-				IPHONEOS_DEPLOYMENT_TARGET = 9.0;
+				IPHONEOS_DEPLOYMENT_TARGET = 11.0;
 				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
 				MTL_FAST_MATH = YES;
 				PRODUCT_BUNDLE_IDENTIFIER = com.google.RunnerTests;
@@ -494,7 +497,7 @@
 				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
 				GCC_WARN_UNUSED_FUNCTION = YES;
 				GCC_WARN_UNUSED_VARIABLE = YES;
-				IPHONEOS_DEPLOYMENT_TARGET = 9.0;
+				IPHONEOS_DEPLOYMENT_TARGET = 11.0;
 				MTL_ENABLE_DEBUG_INFO = YES;
 				ONLY_ACTIVE_ARCH = YES;
 				SDKROOT = iphoneos;
@@ -544,7 +547,7 @@
 				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
 				GCC_WARN_UNUSED_FUNCTION = YES;
 				GCC_WARN_UNUSED_VARIABLE = YES;
-				IPHONEOS_DEPLOYMENT_TARGET = 9.0;
+				IPHONEOS_DEPLOYMENT_TARGET = 11.0;
 				MTL_ENABLE_DEBUG_INFO = NO;
 				SDKROOT = iphoneos;
 				TARGETED_DEVICE_FAMILY = "1,2";
diff --git a/packages/local_auth/local_auth_ios/example/ios/Runner/Info.plist b/packages/local_auth/local_auth_ios/example/ios/Runner/Info.plist
index f8e0356..1af663b 100644
--- a/packages/local_auth/local_auth_ios/example/ios/Runner/Info.plist
+++ b/packages/local_auth/local_auth_ios/example/ios/Runner/Info.plist
@@ -47,5 +47,9 @@
 	<false/>
         <key>NSFaceIDUsageDescription</key>
         <string>App needs to authenticate using faces.</string>
+	<key>CADisableMinimumFrameDurationOnPhone</key>
+	<true/>
+	<key>UIApplicationSupportsIndirectInputEvents</key>
+	<true/>
 </dict>
 </plist>
diff --git a/packages/local_auth/local_auth_ios/example/ios/RunnerTests/FLTLocalAuthPluginTests.m b/packages/local_auth/local_auth_ios/example/ios/RunnerTests/FLTLocalAuthPluginTests.m
index 51c94cc..8ca4c4e 100644
--- a/packages/local_auth/local_auth_ios/example/ios/RunnerTests/FLTLocalAuthPluginTests.m
+++ b/packages/local_auth/local_auth_ios/example/ios/RunnerTests/FLTLocalAuthPluginTests.m
@@ -361,40 +361,38 @@
   [self waitForExpectationsWithTimeout:kTimeout handler:nil];
 }
 
-- (void)testDeviceSupportsBiometrics_withNonEnrolledHardware_iOS11 {
-  if (@available(iOS 11, *)) {
-    FLTLocalAuthPlugin *plugin = [[FLTLocalAuthPlugin alloc] init];
-    id mockAuthContext = OCMClassMock([LAContext class]);
-    plugin.authContextOverrides = @[ mockAuthContext ];
+- (void)testDeviceSupportsBiometrics_withNonEnrolledHardware {
+  FLTLocalAuthPlugin *plugin = [[FLTLocalAuthPlugin alloc] init];
+  id mockAuthContext = OCMClassMock([LAContext class]);
+  plugin.authContextOverrides = @[ mockAuthContext ];
 
-    const LAPolicy policy = LAPolicyDeviceOwnerAuthenticationWithBiometrics;
-    void (^canEvaluatePolicyHandler)(NSInvocation *) = ^(NSInvocation *invocation) {
-      // Write error
-      NSError *__autoreleasing *authError;
-      [invocation getArgument:&authError atIndex:3];
-      *authError = [NSError errorWithDomain:@"error" code:LAErrorBiometryNotEnrolled userInfo:nil];
-      // Write return value
-      BOOL returnValue = NO;
-      NSValue *nsReturnValue = [NSValue valueWithBytes:&returnValue objCType:@encode(BOOL)];
-      [invocation setReturnValue:&nsReturnValue];
-    };
-    OCMStub([mockAuthContext canEvaluatePolicy:policy
-                                         error:(NSError * __autoreleasing *)[OCMArg anyPointer]])
-        .andDo(canEvaluatePolicyHandler);
+  const LAPolicy policy = LAPolicyDeviceOwnerAuthenticationWithBiometrics;
+  void (^canEvaluatePolicyHandler)(NSInvocation *) = ^(NSInvocation *invocation) {
+    // Write error
+    NSError *__autoreleasing *authError;
+    [invocation getArgument:&authError atIndex:3];
+    *authError = [NSError errorWithDomain:@"error" code:LAErrorBiometryNotEnrolled userInfo:nil];
+    // Write return value
+    BOOL returnValue = NO;
+    NSValue *nsReturnValue = [NSValue valueWithBytes:&returnValue objCType:@encode(BOOL)];
+    [invocation setReturnValue:&nsReturnValue];
+  };
+  OCMStub([mockAuthContext canEvaluatePolicy:policy
+                                       error:(NSError * __autoreleasing *)[OCMArg anyPointer]])
+      .andDo(canEvaluatePolicyHandler);
 
-    FlutterMethodCall *call =
-        [FlutterMethodCall methodCallWithMethodName:@"deviceSupportsBiometrics" arguments:@{}];
-    XCTestExpectation *expectation = [self expectationWithDescription:@"Result is called"];
-    [plugin handleMethodCall:call
-                      result:^(id _Nullable result) {
-                        XCTAssertTrue([NSThread isMainThread]);
-                        XCTAssertTrue([result isKindOfClass:[NSNumber class]]);
-                        XCTAssertTrue([result boolValue]);
-                        [expectation fulfill];
-                      }];
+  FlutterMethodCall *call = [FlutterMethodCall methodCallWithMethodName:@"deviceSupportsBiometrics"
+                                                              arguments:@{}];
+  XCTestExpectation *expectation = [self expectationWithDescription:@"Result is called"];
+  [plugin handleMethodCall:call
+                    result:^(id _Nullable result) {
+                      XCTAssertTrue([NSThread isMainThread]);
+                      XCTAssertTrue([result isKindOfClass:[NSNumber class]]);
+                      XCTAssertTrue([result boolValue]);
+                      [expectation fulfill];
+                    }];
 
-    [self waitForExpectationsWithTimeout:kTimeout handler:nil];
-  }
+  [self waitForExpectationsWithTimeout:kTimeout handler:nil];
 }
 
 - (void)testDeviceSupportsBiometrics_withNoBiometricHardware {
@@ -431,68 +429,38 @@
   [self waitForExpectationsWithTimeout:kTimeout handler:nil];
 }
 
-- (void)testGetEnrolledBiometrics_withFaceID_iOS11 {
-  if (@available(iOS 11, *)) {
-    FLTLocalAuthPlugin *plugin = [[FLTLocalAuthPlugin alloc] init];
-    id mockAuthContext = OCMClassMock([LAContext class]);
-    plugin.authContextOverrides = @[ mockAuthContext ];
-
-    const LAPolicy policy = LAPolicyDeviceOwnerAuthenticationWithBiometrics;
-    OCMStub([mockAuthContext canEvaluatePolicy:policy error:[OCMArg setTo:nil]]).andReturn(YES);
-    OCMStub([mockAuthContext biometryType]).andReturn(LABiometryTypeFaceID);
-
-    FlutterMethodCall *call = [FlutterMethodCall methodCallWithMethodName:@"getEnrolledBiometrics"
-                                                                arguments:@{}];
-    XCTestExpectation *expectation = [self expectationWithDescription:@"Result is called"];
-    [plugin handleMethodCall:call
-                      result:^(id _Nullable result) {
-                        XCTAssertTrue([NSThread isMainThread]);
-                        XCTAssertTrue([result isKindOfClass:[NSArray class]]);
-                        XCTAssertEqual([result count], 1);
-                        XCTAssertEqualObjects(result[0], @"face");
-                        [expectation fulfill];
-                      }];
-
-    [self waitForExpectationsWithTimeout:kTimeout handler:nil];
-  }
-}
-
-- (void)testGetEnrolledBiometrics_withTouchID_iOS11 {
-  if (@available(iOS 11, *)) {
-    FLTLocalAuthPlugin *plugin = [[FLTLocalAuthPlugin alloc] init];
-    id mockAuthContext = OCMClassMock([LAContext class]);
-    plugin.authContextOverrides = @[ mockAuthContext ];
-
-    const LAPolicy policy = LAPolicyDeviceOwnerAuthenticationWithBiometrics;
-    OCMStub([mockAuthContext canEvaluatePolicy:policy error:[OCMArg setTo:nil]]).andReturn(YES);
-    OCMStub([mockAuthContext biometryType]).andReturn(LABiometryTypeTouchID);
-
-    FlutterMethodCall *call = [FlutterMethodCall methodCallWithMethodName:@"getEnrolledBiometrics"
-                                                                arguments:@{}];
-    XCTestExpectation *expectation = [self expectationWithDescription:@"Result is called"];
-    [plugin handleMethodCall:call
-                      result:^(id _Nullable result) {
-                        XCTAssertTrue([NSThread isMainThread]);
-                        XCTAssertTrue([result isKindOfClass:[NSArray class]]);
-                        XCTAssertEqual([result count], 1);
-                        XCTAssertEqualObjects(result[0], @"fingerprint");
-                        [expectation fulfill];
-                      }];
-
-    [self waitForExpectationsWithTimeout:kTimeout handler:nil];
-  }
-}
-
-- (void)testGetEnrolledBiometrics_withTouchID_preIOS11 {
-  if (@available(iOS 11, *)) {
-    return;
-  }
+- (void)testGetEnrolledBiometrics_withFaceID {
   FLTLocalAuthPlugin *plugin = [[FLTLocalAuthPlugin alloc] init];
   id mockAuthContext = OCMClassMock([LAContext class]);
   plugin.authContextOverrides = @[ mockAuthContext ];
 
   const LAPolicy policy = LAPolicyDeviceOwnerAuthenticationWithBiometrics;
   OCMStub([mockAuthContext canEvaluatePolicy:policy error:[OCMArg setTo:nil]]).andReturn(YES);
+  OCMStub([mockAuthContext biometryType]).andReturn(LABiometryTypeFaceID);
+
+  FlutterMethodCall *call = [FlutterMethodCall methodCallWithMethodName:@"getEnrolledBiometrics"
+                                                              arguments:@{}];
+  XCTestExpectation *expectation = [self expectationWithDescription:@"Result is called"];
+  [plugin handleMethodCall:call
+                    result:^(id _Nullable result) {
+                      XCTAssertTrue([NSThread isMainThread]);
+                      XCTAssertTrue([result isKindOfClass:[NSArray class]]);
+                      XCTAssertEqual([result count], 1);
+                      XCTAssertEqualObjects(result[0], @"face");
+                      [expectation fulfill];
+                    }];
+
+  [self waitForExpectationsWithTimeout:kTimeout handler:nil];
+}
+
+- (void)testGetEnrolledBiometrics_withTouchID {
+  FLTLocalAuthPlugin *plugin = [[FLTLocalAuthPlugin alloc] init];
+  id mockAuthContext = OCMClassMock([LAContext class]);
+  plugin.authContextOverrides = @[ mockAuthContext ];
+
+  const LAPolicy policy = LAPolicyDeviceOwnerAuthenticationWithBiometrics;
+  OCMStub([mockAuthContext canEvaluatePolicy:policy error:[OCMArg setTo:nil]]).andReturn(YES);
+  OCMStub([mockAuthContext biometryType]).andReturn(LABiometryTypeTouchID);
 
   FlutterMethodCall *call = [FlutterMethodCall methodCallWithMethodName:@"getEnrolledBiometrics"
                                                               arguments:@{}];
@@ -509,39 +477,37 @@
   [self waitForExpectationsWithTimeout:kTimeout handler:nil];
 }
 
-- (void)testGetEnrolledBiometrics_withoutEnrolledHardware_iOS11 {
-  if (@available(iOS 11, *)) {
-    FLTLocalAuthPlugin *plugin = [[FLTLocalAuthPlugin alloc] init];
-    id mockAuthContext = OCMClassMock([LAContext class]);
-    plugin.authContextOverrides = @[ mockAuthContext ];
+- (void)testGetEnrolledBiometrics_withoutEnrolledHardware {
+  FLTLocalAuthPlugin *plugin = [[FLTLocalAuthPlugin alloc] init];
+  id mockAuthContext = OCMClassMock([LAContext class]);
+  plugin.authContextOverrides = @[ mockAuthContext ];
 
-    const LAPolicy policy = LAPolicyDeviceOwnerAuthenticationWithBiometrics;
-    void (^canEvaluatePolicyHandler)(NSInvocation *) = ^(NSInvocation *invocation) {
-      // Write error
-      NSError *__autoreleasing *authError;
-      [invocation getArgument:&authError atIndex:3];
-      *authError = [NSError errorWithDomain:@"error" code:LAErrorBiometryNotEnrolled userInfo:nil];
-      // Write return value
-      BOOL returnValue = NO;
-      NSValue *nsReturnValue = [NSValue valueWithBytes:&returnValue objCType:@encode(BOOL)];
-      [invocation setReturnValue:&nsReturnValue];
-    };
-    OCMStub([mockAuthContext canEvaluatePolicy:policy
-                                         error:(NSError * __autoreleasing *)[OCMArg anyPointer]])
-        .andDo(canEvaluatePolicyHandler);
+  const LAPolicy policy = LAPolicyDeviceOwnerAuthenticationWithBiometrics;
+  void (^canEvaluatePolicyHandler)(NSInvocation *) = ^(NSInvocation *invocation) {
+    // Write error
+    NSError *__autoreleasing *authError;
+    [invocation getArgument:&authError atIndex:3];
+    *authError = [NSError errorWithDomain:@"error" code:LAErrorBiometryNotEnrolled userInfo:nil];
+    // Write return value
+    BOOL returnValue = NO;
+    NSValue *nsReturnValue = [NSValue valueWithBytes:&returnValue objCType:@encode(BOOL)];
+    [invocation setReturnValue:&nsReturnValue];
+  };
+  OCMStub([mockAuthContext canEvaluatePolicy:policy
+                                       error:(NSError * __autoreleasing *)[OCMArg anyPointer]])
+      .andDo(canEvaluatePolicyHandler);
 
-    FlutterMethodCall *call = [FlutterMethodCall methodCallWithMethodName:@"getEnrolledBiometrics"
-                                                                arguments:@{}];
-    XCTestExpectation *expectation = [self expectationWithDescription:@"Result is called"];
-    [plugin handleMethodCall:call
-                      result:^(id _Nullable result) {
-                        XCTAssertTrue([NSThread isMainThread]);
-                        XCTAssertTrue([result isKindOfClass:[NSArray class]]);
-                        XCTAssertEqual([result count], 0);
-                        [expectation fulfill];
-                      }];
+  FlutterMethodCall *call = [FlutterMethodCall methodCallWithMethodName:@"getEnrolledBiometrics"
+                                                              arguments:@{}];
+  XCTestExpectation *expectation = [self expectationWithDescription:@"Result is called"];
+  [plugin handleMethodCall:call
+                    result:^(id _Nullable result) {
+                      XCTAssertTrue([NSThread isMainThread]);
+                      XCTAssertTrue([result isKindOfClass:[NSArray class]]);
+                      XCTAssertEqual([result count], 0);
+                      [expectation fulfill];
+                    }];
 
-    [self waitForExpectationsWithTimeout:kTimeout handler:nil];
-  }
+  [self waitForExpectationsWithTimeout:kTimeout handler:nil];
 }
 @end
diff --git a/packages/local_auth/local_auth_ios/ios/Classes/FLTLocalAuthPlugin.m b/packages/local_auth/local_auth_ios/ios/Classes/FLTLocalAuthPlugin.m
index 4d98254..10c1e81 100644
--- a/packages/local_auth/local_auth_ios/ios/Classes/FLTLocalAuthPlugin.m
+++ b/packages/local_auth/local_auth_ios/ios/Classes/FLTLocalAuthPlugin.m
@@ -84,16 +84,9 @@
                 handler:^(UIAlertAction *action) {
                   if (UIApplicationOpenSettingsURLString != NULL) {
                     NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
-                    if (@available(iOS 10, *)) {
-                      [[UIApplication sharedApplication] openURL:url
-                                                         options:@{}
-                                               completionHandler:NULL];
-                    } else {
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wdeprecated-declarations"
-                      [[UIApplication sharedApplication] openURL:url];
-#pragma clang diagnostic pop
-                    }
+                    [[UIApplication sharedApplication] openURL:url
+                                                       options:@{}
+                                             completionHandler:NULL];
                     result(@NO);
                   }
                 }];
@@ -117,17 +110,9 @@
   }
   // If not, check if it is because no biometrics are enrolled (but still present).
   if (authError != nil) {
-    if (@available(iOS 11, *)) {
-      if (authError.code == LAErrorBiometryNotEnrolled) {
-        result(@YES);
-        return;
-      }
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wdeprecated-declarations"
-    } else if (authError.code == LAErrorTouchIDNotEnrolled) {
+    if (authError.code == LAErrorBiometryNotEnrolled) {
       result(@YES);
       return;
-#pragma clang diagnostic pop
     }
   }
 
@@ -141,13 +126,9 @@
   if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics
                            error:&authError]) {
     if (authError == nil) {
-      if (@available(iOS 11, *)) {
-        if (context.biometryType == LABiometryTypeFaceID) {
-          [biometrics addObject:@"face"];
-        } else if (context.biometryType == LABiometryTypeTouchID) {
-          [biometrics addObject:@"fingerprint"];
-        }
-      } else {
+      if (context.biometryType == LABiometryTypeFaceID) {
+        [biometrics addObject:@"face"];
+      } else if (context.biometryType == LABiometryTypeTouchID) {
         [biometrics addObject:@"fingerprint"];
       }
     }
@@ -216,14 +197,9 @@
     result(@YES);
   } else {
     switch (error.code) {
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wdeprecated-declarations"
-        // TODO(stuartmorgan): Remove the pragma and s/TouchID/Biometry/ in these constants when
-        // iOS 10 support is dropped. The values are the same, only the names have changed.
-      case LAErrorTouchIDNotAvailable:
-      case LAErrorTouchIDNotEnrolled:
-      case LAErrorTouchIDLockout:
-#pragma clang diagnostic pop
+      case LAErrorBiometryNotAvailable:
+      case LAErrorBiometryNotEnrolled:
+      case LAErrorBiometryLockout:
       case LAErrorUserFallback:
       case LAErrorPasscodeNotSet:
       case LAErrorAuthenticationFailed:
@@ -248,12 +224,7 @@
   NSString *errorCode = @"NotAvailable";
   switch (authError.code) {
     case LAErrorPasscodeNotSet:
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wdeprecated-declarations"
-      // TODO(stuartmorgan): Remove the pragma and s/TouchID/Biometry/ in this constant when
-      // iOS 10 support is dropped. The values are the same, only the names have changed.
-    case LAErrorTouchIDNotEnrolled:
-#pragma clang diagnostic pop
+    case LAErrorBiometryNotEnrolled:
       if ([arguments[@"useErrorDialogs"] boolValue]) {
         [self alertMessage:arguments[@"goToSettingDescriptionIOS"]
                  firstButton:arguments[@"okButton"]
@@ -263,12 +234,7 @@
       }
       errorCode = authError.code == LAErrorPasscodeNotSet ? @"PasscodeNotSet" : @"NotEnrolled";
       break;
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wdeprecated-declarations"
-      // TODO(stuartmorgan): Remove the pragma and s/TouchID/Biometry/ in this constant when
-      // iOS 10 support is dropped. The values are the same, only the names have changed.
-    case LAErrorTouchIDLockout:
-#pragma clang diagnostic pop
+    case LAErrorBiometryLockout:
       [self alertMessage:arguments[@"lockOut"]
                firstButton:arguments[@"okButton"]
              flutterResult:result
diff --git a/packages/local_auth/local_auth_ios/ios/local_auth_ios.podspec b/packages/local_auth/local_auth_ios/ios/local_auth_ios.podspec
index 734f7b6..02342c7 100644
--- a/packages/local_auth/local_auth_ios/ios/local_auth_ios.podspec
+++ b/packages/local_auth/local_auth_ios/ios/local_auth_ios.podspec
@@ -17,7 +17,7 @@
   s.source_files = 'Classes/**/*'
   s.public_header_files = 'Classes/**/*.h'
   s.dependency 'Flutter'
-  s.platform = :ios, '9.0'
+  s.platform = :ios, '11.0'
   s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES' }
 end
 
diff --git a/packages/local_auth/local_auth_ios/pubspec.yaml b/packages/local_auth/local_auth_ios/pubspec.yaml
index 34603c0..756cf8c 100644
--- a/packages/local_auth/local_auth_ios/pubspec.yaml
+++ b/packages/local_auth/local_auth_ios/pubspec.yaml
@@ -2,11 +2,11 @@
 description: iOS implementation of the local_auth plugin.
 repository: https://github.com/flutter/packages/tree/main/packages/local_auth/local_auth_ios
 issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+local_auth%22
-version: 1.0.13
+version: 1.1.0
 
 environment:
-  sdk: ">=2.14.0 <3.0.0"
-  flutter: ">=3.0.0"
+  sdk: ">=2.18.0 <3.0.0"
+  flutter: ">=3.3.0"
 
 flutter:
   plugin: