Почему некоторые устройства iPad возвращают биометрические данные, недоступные с этим кодом? - PullRequest
0 голосов
/ 26 апреля 2018

У меня возникли некоторые проблемы с пониманием возвращаемых значений, которые я получаю даже в новом проекте с только приведенным ниже кодом.

- (void)viewDidLoad {
    [super viewDidLoad];

    LAContext*   touchContext          = [LAContext new];
    NSError*     policyEvaluationError = nil;

    [touchContext canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics
                                            error:&policyEvaluationError];

    NSLog(@"\n\n %@", policyEvaluationError);
}

Это результаты только для симуляторов iPad, iOS 10.3.1- 11.3.

iPad (5-го поколения) - «Биометрия недоступна на этом устройстве.»

iPad Air - «Биометрия недоступна на этом устройстве».

iPad Air 2 - «Идентификационные данные не зарегистрированы.»

iPad Pro (9,7 дюйма) - «Биометрия недоступна на этом устройстве».

iPad Pro (12,9 дюйма) (2-го поколения) - «Биометрия недоступна на этом устройстве».

Эти результаты «Биометрия недоступна на этом устройстве» происходят, когда эти устройства зарегистрированы или нет.

Все протестированные типы устройств iPhone также возвращают «Идентификационные данные не зарегистрированы», как, например, iPad Air 2, что я ожидаю, когда они не зарегистрированы, но имеют аппаратное обеспечение touchID. При регистрации просто не возникает ошибки.

На некоторых реальных устройствах iPad результаты также могут отличаться, но не одинаково. Некоторые устройства не сохраняют отпечатки пальцев и возвращают сообщение «Биометрия недоступна на этом устройстве», в то время как другие просто возвращают зарегистрированное значение / ноль.. С сохраненными отпечатками пальцев все они, кажется, ведут себя так, как я ожидал.

Насколько я знаю, мы использовали этот код в производстве в течение довольно долгого времени без жалоб.связан с этой темой, но мы только недавно заметили это в рамках разработки / QA.

Этот код просто ненадежен на всех устройствах, возможно, что-то изменилось или я что-то здесь не так делаю?

1 Ответ

0 голосов
/ 17 ноября 2018

Это ошибка в инфраструктуре Apple, и я подал rdar: // problem / 46148637 на этот счет.Если вам интересно, вот полный текст этого отчета:

iPad Pro (12.9-inch) (2nd generation) simulator thinks it doesn't have Touch ID

Summary:
LAContext().canEvaluatePolicy(_:error:) with the policy LAPolicy.deviceOwnerAuthenticationWithBiometrics fails with LAError.Code. biometryNotAvailable on the iPad Pro (12.9-inch) (2nd generation) simulator. A bit of digging suggests that:

• LAContext().canEvaluatePolicy(_:error:), from LocalAuthentication.framework, ends up communicating with coreauthd to evaluate the policy.
• The specific error is generated in -[BiometryHelper deviceHasBiometryWithError:] in DaemonUtils.framework, which is loaded into coreauthd.
• -[BiometryHelper deviceHasBiometryWithError:] returns this error when -BiometryHelper._device is nil.
• BiometryHelper._device is the first object grabbed from +[BKDeviceManager availableDevices], in BiometricKit.framework.
• +[BKDeviceManager availableDevices] *should* create a Touch ID device descriptor if it finds that the device supports Touch ID, which it checks by calling MGGetBoolAnswer(@"touch-id").
• MGGetBoolAnswer(@"touch-id") returns NO (!)
• The device believes it does not have a Touch ID sensor.
• LAContext().canEvaluatePolicy(_:error:) returns false because it believes the device cannot evaluate this policy.

Steps to Reproduce:
1. Try to evaluate a biometric policy on the  iPad Pro (12.9-inch) (2nd generation) simulator.

Expected Results:
I either receive a success, or something about being unenrolled.

Actual Results:
I'm told that this iPad doesn't have a Touch ID sensor, when clearly should have one.

Version/Build:
Xcode Version 10.1 (10B61)

Configuration:
Xcode Version 10.1 (10B61)/macOS Mojave 10.14.2 Beta (18C48a)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...