Error de iOS 8 Touch ID "Se requiere interacción del usuario".

He estado trabajando para integrar la compatibilidad con Touch ID en una aplicación en la que estoy trabajando. Sin embargo, está actuando de manera muy inconsistente. Uno de los problemas comunes que estoy viendo es que el lanzamiento de una nueva aplicación funciona como se esperaba, pero luego, al poner en segundo plano la aplicación y ponerla en primer plano, recibo un error.

evaluatePolicy:localizedReason:reply:

Ni siquiera tiene mucho sentido (nunca veo la alerta táctil)

Error Domain=com.apple.LocalAuthentication Code=-1004 "User interaction is required." UserInfo=0x171470a00 {NSLocalizedDescription=User interaction is required.}

He intentado presentar la alerta táctil cuando la aplicación ya se está ejecutando, cuando está en primer plano, no parece importar. Está roto cada vez que se inicia la aplicación inicial.

¿Alguien más se encuentra con esto?

Como referencia, aquí está el código que estoy usando:

if (_useTouchId && [LAContext class]) {
    LAContext *myContext = [[LAContext alloc] init];
    NSError *authError = nil;

    if ([myContext canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&authError]) {
        _didPresentTouchId = YES;
        [myContext evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:@"Use your Touch ID to open *****" reply:^(BOOL success, NSError *error) {
            dispatch_async(dispatch_get_main_queue(), ^ {
                if (success) {
                    _isClosing = YES;

                    [self hide];
                    if (_successBlock) {
                        _successBlock();
                    }
                }
                else if (error && error.code != -2 && error.code != -3 && error.code != -1004) {
                    [[[UIAlertView alloc] initWithTitle:@"Error" message:@"Authentication failed, please enter your Pin" delegate:self cancelButtonTitle:@"Dismiss" otherButtonTitles:nil] show];
                }
                else {
                    if (error) {
                        DDLogError(@"TouchID error: %@", error.description);
                    }

                    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, .6 * NSEC_PER_SEC), dispatch_get_main_queue(), ^ {
                        [self keyboardButtonTouched];
                    });
                }
            });
        }];
    }
}

Respuestas a la pregunta(2)

Su respuesta a la pregunta