Détecter par programme si le mot de passe iOS est activé ou non
Plutôt que de construire un mot de passe directement dans mon application et potentiellement obliger l'utilisateur à saisir un mot de passe deux fois (une fois pour l'appareil et pour mon application); je pensais que j'étais peut-malin moi-même et faire quelque chose le long des lignes de:
if (device has passcode)
continue into my app
else
make user enter my app passcode
Je ne veux pas que l'appareil code de sécurité, je ne veux pas forcer un verrouillage de l'écran, pas de chiffrer quoi que ce soit - tout ce que je veux vraiment, c'est une API juste pour détecter si un périphérique code est en vigueur. Quelque chose comme:
BOOL notReally = [UIDevice isUserSlightlyMoreSecureBecauseTheySetDeviceLockOn];
ou peut-être si j'ai de la chance:
BOOL isPasscodeEnabled = [UIDevice isPasscodeEnabled];
BOOL isSimplePasscode = [UIDevice isSimplePasscode];
NSInteger minutes = [UIDevice requirePasscodeAfter];
Je devine pas basé sur cette question (mais il est vieux de quelques années) "par programmation case pour iPhone Code de mot de passe dans les paramètres de faisceau" ou ce pourrait être la réponse; "Verrouiller Déverrouiller les événements de l'iphone" qui n'est pas exactement ce que je veux, mais pourrait fonctionner "après le fait".
source d'informationauteur Eric | 2014-01-24
Vous devez vous connecter pour publier un commentaire.
Mise à jour
Comme de l'iOS 9, vous pouvez atteindre cet objectif en utilisant la
LocalAuthentication.framework
. Si le ciblage iOS 9+ lire les commentaires ici ou regarder cette réponse.Si vous avez encore besoin de cibler iOS 8 puis continuer la lecture 🙂
De départ dans iOS8, vous le pouvez!
J'ai mis en place une simple catégorie de vérifier facilement l'état: https://github.com/liamnichols/UIDevice-PasscodeStatus
Comment il Fonctionne
Cette catégorie fonctionne en utilisant la nouvelle accessControl fonctionnalités ajoutées à la Sécurité.Cadre dans iOS 8.
Elle tente d'ajouter un élément pour le trousseau de clés à l'aide de la
kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly
niveau de protection.La documentation stipule ce qui suit:
De ce fait, une erreur est renvoyée lorsque vous essayez d'ajouter ou de lire un article dans le trousseau de clés avec ce niveau de accessControl. Si nous voyons cette erreur, le
passcodeStatus
retourne commeLNPasscodeStatusDisabled
.Si nous pouvons réussir à lire ou écrire sur le trousseau de clés avec ce niveau de accessControl puis nous revenons
LNPasscodeStatusEnabled
.Si l'appareil n'est pas pris en charge ou une autre erreur avec le trousseau de clés est de retour, nous avons retour
LNPasscodeStatusUnknown
.Pour iOS 9+ vous pouvez le détecter à l'aide de la nouvelle
LocalAuthentication
classe, et il fonctionne sur Simulateur ainsi que les périphériques:Je ne suis pas au courant de toute façon de l'obtenir directement cette information, cependant, je pense que vous pouvez probablement obtenir le résultat que vous recherchez en utilisant les effets secondaires de la Pomme de support pour le chiffrement de disque. Voir La Protection Des Données À L'Aide Sur Le Cryptage De Disque Dur pour plus de détails.
Cependant, c'est un hack, plutôt que d'avoir été conçu comportement, et il y a un coin-cas, il ne sera pas conscient de. Je recommande de faire cette fonction quelque chose qui est explicitement sous le contrôle de l'utilisateur, plutôt que quelque chose que vous activez avec des heuristiques.