From e20ef5811a5d954f21de48d58b7245ffbbe22d4a Mon Sep 17 00:00:00 2001 From: Jenn Magder Date: Thu, 26 Dec 2024 14:24:36 -0800 Subject: [PATCH 1/3] [local_auth_darwin] Handle when biometry hardware is available but permissions have been denied for the app --- .../local_auth/local_auth_darwin/CHANGELOG.md | 3 ++- .../Tests/FLALocalAuthPluginTests.swift | 25 +++++++++++++++++-- .../local_auth_darwin/FLALocalAuthPlugin.m | 4 +++ .../local_auth/local_auth_darwin/pubspec.yaml | 2 +- 4 files changed, 30 insertions(+), 4 deletions(-) diff --git a/packages/local_auth/local_auth_darwin/CHANGELOG.md b/packages/local_auth/local_auth_darwin/CHANGELOG.md index c5fcf90d34a..78c17dbc4c9 100644 --- a/packages/local_auth/local_auth_darwin/CHANGELOG.md +++ b/packages/local_auth/local_auth_darwin/CHANGELOG.md @@ -1,5 +1,6 @@ -## NEXT +## 1.4.3 +* Handles when biometry hardware is available but permissions have been denied for the app. * Updates minimum supported SDK version to Flutter 3.22/Dart 3.4. ## 1.4.2 diff --git a/packages/local_auth/local_auth_darwin/darwin/Tests/FLALocalAuthPluginTests.swift b/packages/local_auth/local_auth_darwin/darwin/Tests/FLALocalAuthPluginTests.swift index 73da7123b38..0ba718ef618 100644 --- a/packages/local_auth/local_auth_darwin/darwin/Tests/FLALocalAuthPluginTests.swift +++ b/packages/local_auth/local_auth_darwin/darwin/Tests/FLALocalAuthPluginTests.swift @@ -447,7 +447,7 @@ class FLALocalAuthPluginTests: XCTestCase { XCTAssertNil(error) } - func testDeviceSupportsBiometrics_withNoBiometricHardware() { + func testDeviceSupportsBiometrics_withBiometryNotAvailable() { let stubAuthContext = StubAuthContext() let alertFactory = StubAlertFactory() let viewProvider = StubViewProvider() @@ -456,7 +456,8 @@ class FLALocalAuthPluginTests: XCTestCase { alertFactory: alertFactory, viewProvider: viewProvider) stubAuthContext.expectBiometrics = true - stubAuthContext.canEvaluateError = NSError(domain: "error", code: 0) + stubAuthContext.canEvaluateError = NSError( + domain: "error", code: LAError.biometryNotAvailable.rawValue) var error: FlutterError? let result = plugin.deviceCanSupportBiometricsWithError(&error) @@ -464,6 +465,26 @@ class FLALocalAuthPluginTests: XCTestCase { XCTAssertNil(error) } + + func testDeviceSupportsBiometrics_withBiometryNotAvailableLoadedBiometryType() { + let stubAuthContext = StubAuthContext() + let alertFactory = StubAlertFactory() + let viewProvider = StubViewProvider() + let plugin = FLALocalAuthPlugin( + contextFactory: StubAuthContextFactory(contexts: [stubAuthContext]), + alertFactory: alertFactory, viewProvider: viewProvider) + + stubAuthContext.expectBiometrics = true + stubAuthContext.biometryType = LABiometryType.touchID + stubAuthContext.canEvaluateError = NSError( + domain: "error", code: LAError.biometryNotAvailable.rawValue) + + var error: FlutterError? + let result = plugin.deviceCanSupportBiometricsWithError(&error) + XCTAssertTrue(result!.boolValue) + XCTAssertNil(error) + } + func testGetEnrolledBiometricsWithFaceID() { let stubAuthContext = StubAuthContext() let alertFactory = StubAlertFactory() diff --git a/packages/local_auth/local_auth_darwin/darwin/local_auth_darwin/Sources/local_auth_darwin/FLALocalAuthPlugin.m b/packages/local_auth/local_auth_darwin/darwin/local_auth_darwin/Sources/local_auth_darwin/FLALocalAuthPlugin.m index bc50a59a41f..1edd787c04a 100644 --- a/packages/local_auth/local_auth_darwin/darwin/local_auth_darwin/Sources/local_auth_darwin/FLALocalAuthPlugin.m +++ b/packages/local_auth/local_auth_darwin/darwin/local_auth_darwin/Sources/local_auth_darwin/FLALocalAuthPlugin.m @@ -317,6 +317,10 @@ - (nullable NSNumber *)deviceCanSupportBiometricsWithError: if (authError.code == LAErrorBiometryNotEnrolled) { return @YES; } + // Biometry hardware is available, but possibly permissions were denied. + if (authError.code == LAErrorBiometryNotAvailable && context.biometryType != LABiometryTypeNone) { + return @YES; + } } return @NO; diff --git a/packages/local_auth/local_auth_darwin/pubspec.yaml b/packages/local_auth/local_auth_darwin/pubspec.yaml index 8aff58fe369..df3b43489f2 100644 --- a/packages/local_auth/local_auth_darwin/pubspec.yaml +++ b/packages/local_auth/local_auth_darwin/pubspec.yaml @@ -2,7 +2,7 @@ name: local_auth_darwin description: iOS implementation of the local_auth plugin. repository: https://github.com/flutter/packages/tree/main/packages/local_auth/local_auth_darwin issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+local_auth%22 -version: 1.4.2 +version: 1.4.3 environment: sdk: ^3.4.0 From ea1d9c3423e5f46aebab389a301fb07b300a5189 Mon Sep 17 00:00:00 2001 From: Jenn Magder Date: Thu, 26 Dec 2024 14:38:51 -0800 Subject: [PATCH 2/3] Format --- .../Sources/local_auth_darwin/FLALocalAuthPlugin.m | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/local_auth/local_auth_darwin/darwin/local_auth_darwin/Sources/local_auth_darwin/FLALocalAuthPlugin.m b/packages/local_auth/local_auth_darwin/darwin/local_auth_darwin/Sources/local_auth_darwin/FLALocalAuthPlugin.m index 1edd787c04a..33bd25df70e 100644 --- a/packages/local_auth/local_auth_darwin/darwin/local_auth_darwin/Sources/local_auth_darwin/FLALocalAuthPlugin.m +++ b/packages/local_auth/local_auth_darwin/darwin/local_auth_darwin/Sources/local_auth_darwin/FLALocalAuthPlugin.m @@ -318,7 +318,8 @@ - (nullable NSNumber *)deviceCanSupportBiometricsWithError: return @YES; } // Biometry hardware is available, but possibly permissions were denied. - if (authError.code == LAErrorBiometryNotAvailable && context.biometryType != LABiometryTypeNone) { + if (authError.code == LAErrorBiometryNotAvailable && + context.biometryType != LABiometryTypeNone) { return @YES; } } From cafcf973683f1f261e1bb24d9a22b2162f5c7cae Mon Sep 17 00:00:00 2001 From: Jenn Magder Date: Thu, 9 Jan 2025 20:24:12 -0800 Subject: [PATCH 3/3] format --- .../local_auth_darwin/darwin/Tests/FLALocalAuthPluginTests.swift | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/local_auth/local_auth_darwin/darwin/Tests/FLALocalAuthPluginTests.swift b/packages/local_auth/local_auth_darwin/darwin/Tests/FLALocalAuthPluginTests.swift index 0ba718ef618..c8e1324a277 100644 --- a/packages/local_auth/local_auth_darwin/darwin/Tests/FLALocalAuthPluginTests.swift +++ b/packages/local_auth/local_auth_darwin/darwin/Tests/FLALocalAuthPluginTests.swift @@ -465,7 +465,6 @@ class FLALocalAuthPluginTests: XCTestCase { XCTAssertNil(error) } - func testDeviceSupportsBiometrics_withBiometryNotAvailableLoadedBiometryType() { let stubAuthContext = StubAuthContext() let alertFactory = StubAlertFactory()