Я предполагаю, что вы используете опцию kSecAccessControlUserPresence
в элементе SecAccessControlCreateWithFlags
, который является частью вашего запроса, чтобы добавить элементы в цепочку для ключей.Где-то у вас есть что-то похожее на это:
SecAccessControlRef access = SecAccessControlCreateWithFlags(nil,
kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly,
kSecAccessControlUserPresence,
nil);
Документация для опции kSecAccessControlUserPresence
гласит:
Ограничение для доступа к элементу с помощью биометрии или пароля.
При необходимости он вернется к паролю.Чтобы ограничить это использование только биометрии, вы должны использовать флаги kSecAccessControlBiometryAny
или kSecAccessControlBiometryCurrentSet
.Оба требуют TouchID или FaceID, чтобы разблокировать элемент.kSecAccessControlBiometryAny
требует любых соответствующих биометрических параметров, даже если они изменяются после установки элемента цепочки для ключей.kSecAccessControlBiometryCurrentSet
приводит к тому, что элемент становится недействительным, если пользователь добавляет или удаляет пальцы из TouchID или повторно регистрирует для FaceID.
Вы должны изменить приведенный выше код контроля доступа либо на этот для kSecAccessControlBiometryAny
:
SecAccessControlRef access = SecAccessControlCreateWithFlags(nil,
kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly,
kSecAccessControlBiometryAny,
nil);
или это для kSecAccessControlBiometryCurrentSet
:
SecAccessControlRef access = SecAccessControlCreateWithFlags(nil,
kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly,
kSecAccessControlBiometryCurrentSet,
nil);
Документация Apple по SecAccessControlCreateFlags
: https://developer.apple.com/documentation/security/secaccesscontrolcreateflags?changes=_2&language=objc