[ Package conformance ]
Auth & Payments · >=13.0.0
expo-local-authentication
native-seam: the LocalAuthentication.js wrapper + AuthenticationType/SecurityLevel enums + types run from the real bundle; only the ExpoLocalAuthentication expo module is ours, and it mirrors expo iOS LocalAuthenticationModule.swift exactly for the reference simulator (iPhone 16 Face ID device, no biometrics enrolled, no passcode): hasHardwareAsync true, isEnrolledAsync false, supportedAuthenticationTypesAsync [FACIAL_RECOGNITION], getEnrolledLevelAsync NONE, authenticateAsync resolves {success:false,error:"passcode_not_set"|"not_enrolled"} per disableDeviceFallback — the exact convertErrorCode path. cancelAuthenticate is deliberately absent so the wrapper faithfully throws UnavailabilityError on iOS (it is @platform android upstream). this IS the complete faithful contract on the reference device, same tier as react-native-exit-app / react-native-orientation-locker: a default iOS Simulator equally cannot run a real biometric prompt.95%
API coverage
No visual conformance cases have been published for this package yet. The registry summary below describes what the compat layer implements.
Working (5)
full ExpoLocalAuthentication native surface with upstream-exact iOS-simulator semantics — hasHardwareAsyncisEnrolledAsyncsupportedAuthenticationTypesAsyncgetEnrolledLevelAsyncauthenticateAsync (disableDeviceFallback-aware error codes); real package enums/types/wrapper run from the bundle so SecurityLevel.BIOMETRIC alias + UnavailabilityError guards behave exactly as upstream; iOS/android platform divergence (cancelAuthenticate) preserved
Missing (2)
no real biometric prompt can succeed — but neither can the reference iOS Simulator (no enrolled biometricsno secure enclave); a real success path would require physical biometric hardware that browsers and simulators alike do not expose