olvide digitos desactivar contraseña como codigo cambiar bloqueo apple activacion ios security ipad locking

ios - digitos - desactivar bloqueo de activacion iphone



Comprobación programática si se establece un bloqueo de contraseña (4)

Con iOS 8, ahora hay una manera de verificar que el usuario tiene un código de acceso configurado. Este código se bloqueará en iOS 7.

C objetivo:

-(BOOL) deviceHasPasscode { NSData* secret = [@"Device has passcode set?" dataUsingEncoding:NSUTF8StringEncoding]; NSDictionary *attributes = @{ (__bridge id)kSecClass: (__bridge id)kSecClassGenericPassword, (__bridge id)kSecAttrService: @"LocalDeviceServices", (__bridge id)kSecAttrAccount: @"NoAccount", (__bridge id)kSecValueData: secret, (__bridge id)kSecAttrAccessible: (__bridge id)kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly }; OSStatus status = SecItemAdd((__bridge CFDictionaryRef)attributes, NULL); if (status == errSecSuccess) { // item added okay, passcode has been set SecItemDelete((__bridge CFDictionaryRef)attributes); return true; } return false; }

Rápido:

func deviceHasPasscode() -> Bool { let secret = "Device has passcode set?".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false) let attributes = [kSecClass as String:kSecClassGenericPassword, kSecAttrService as String:"LocalDeviceServices", kSecAttrAccount as String:"NoAccount", kSecValueData as String:secret!, kSecAttrAccessible as String:kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly] let status = SecItemAdd(attributes, nil) if status == 0 { SecItemDelete(attributes) return true } return false }

Dado que mi aplicación trataría con datos confidenciales del usuario, me gustaría saber si hay alguna forma de verificar desde mi aplicación si hay un bloqueo de código de acceso configurado en iOS.

La razón por la que necesito verificar esto es porque, si el usuario tiene en la aplicación alguna información y luego la mantiene sobre la mesa y se apaga por un par de minutos. El iPad / iPhone por defecto, pasa al modo de espera. Si se hubiera establecido un bloqueo de código de acceso, solo cuando se ingrese el código de acceso correcto, cualquier persona podría usar el ipad. Esto proporcionaría una medida de seguridad adicional para evitar que cualquier transeúnte vea los datos confidenciales de la aplicación.

Básicamente, me gustaría que mi aplicación compruebe si el bloqueo del código de acceso está establecido y, si no es así, le pide al usuario que lo haga.

es posible?


Desde iOS 9 , hay un indicador LAPolicyDeviceOwnerAuthentication en el marco de LocalAuthentication.

+ (BOOL)isPasscodeEnabled { NSError *error = nil; LAContext *context = [[LAContext alloc] init]; BOOL passcodeEnabled = [context canEvaluatePolicy:LAPolicyDeviceOwnerAuthentication error:&error]; if(passcodeEnabled) { NSLog(@"Passcode enabled."); return YES; } NSLog(@"Passcode NOT enabled: %@", error.localizedDescription); return NO; }

Desde iOS 8 ha habido otra bandera para verificar si TouchID está habilitado:

+ (BOOL)isTouchIdEnabled { NSError *error = nil; LAContext *context = [[LAContext alloc] init]; BOOL touchIDEnabled = [context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error]; if(touchIDEnabled) { NSLog(@"TouchID enabled."); return YES; } NSLog(@"TouchID NOT enabled: %@", error.localizedDescription); return NO; }


Eche un vistazo a la sección Protección de archivos en el entorno de tiempo de ejecución de la aplicación . La protección de archivos requiere que el usuario tenga habilitada la configuración de bloqueo de código de acceso y que se establezca un código de acceso válido. Si su aplicación escribe / crea y archiva, use la opción NSDataWritingFileProtectionComplete . Si su aplicación no utiliza ningún archivo, cree un archivo ficticio y habilite la protección.


Solución Xamarin.iOS para iOS 8 ... nota Llamo a SecKeyChain.Remove(secRecord) en cada comprobación. Descubrí que si no incluía esto, podía poner el dispositivo en un estado extraño en el que intentaba autenticarse con el usuario en cada llamada a SecKeyChain.Add(secRecord)

private bool DetectIfPasscodeIsSet () { var secRecord = new SecRecord (SecKind.GenericPassword) { Label = "Check if passcode is set", Description = "Check if passcode is set", Account = "Check if passcode is set", Service = "Check if passcode is set", Comment = "Check if passcode is set", ValueData = NSData.FromString ("Check if passcode is set"), Generic = NSData.FromString ("Check if passcode is set") }; SecKeyChain.Remove (secRecord); secRecord.AccessControl = new SecAccessControl (SecAccessible.WhenPasscodeSetThisDeviceOnly); var status = SecKeyChain.Add (secRecord); if (SecStatusCode.Success == status) { SecKeyChain.Remove (secRecord); return true; } return false; }