iOS SFHFKeychainUtils échoue * parfois * avec erreur -25308 errSecInteractionNotAllowed

J'ai ce code récupérant un mot de passe du trousseau pour un nom d'user donné NSSsortingng:

NSError *error = nil; NSSsortingng *appName = [[[NSBundle mainBundle] infoDictionary] objectForKey:(NSSsortingng*)kCFBundleNameKey]; NSSsortingng *pw = [SFHFKeychainUtils getPasswordForUsername:username andServiceName:appName error:&error]; if(error != nil) // log the error 

La plupart du time, pour la plupart des users, tout cela fonctionne correctement – mais pour certains users spécifiques, cet appel semble échouer (et continuer à échouer) où il renvoie l'erreur suivante:

 The operation couldn't be completed. (SFHFKeychainUtilsErrorDomain error -25308.) 

Ceci est apparemment errSecInteractionNotAllowed – ce que j'ai lu, je pense que cela signifie qu'une interaction de l'user est nécessaire pour que le trousseau soit accessible.

Est-ce que quelqu'un a une idée de la raison pour laquelle cet appel peut échouer pour certains users seulement? Cette input de trousseau est spécifique à mon application – alors pourquoi une interaction de l'user est-elle nécessaire pour y accéder?

Des pointeurs très appréciés …

OK, donc j'ai travaillé cela finalement.

Finalement, j'ai travaillé sur les users qui avaient des problèmes avaient mis un code de locking sur leur téléphone. Si le téléphone était verrouillé, le système de trousseau renvoyait cette erreur -25308.

Si vous n'avez jamais besoin d'accéder au trousseau lorsque l'application est active dans le champ, vous ne verrez jamais ce problème, mais si vous devez continuer le traitement lorsque le téléphone est verrouillé ou si l'application est en arrière-plan, vous le verrez.

Ailleurs, j'ai lu que l'atsortingbut d'access par défaut pour le système kechain est kSecAttrAccessibleAlways – mais je pense que c'est périmé. Il semble que l'atsortingbut d'access par défaut pour le système de trousseau est tel que lorsque le téléphone est verrouillé avec un code PIN, les éléments ne sont pas disponibles.

Le correctif pour cela consiste à modifier le code SFHFKeychainUtils pour définir un atsortingbut kSecAttrAccessible spécifique sur les éléments de keychain qu'il gère (ce que le code d'origine n'a pas fait – vraisemblablement comme il existait avant ces attributes).

Cette version mise à jour wordpress du code SFHFKeychainUtils contient les correctifs – searchz kSecAttrAccessible pour voir où ils ont ajouté le code d'atsortingbut accessible.

J'espère que cela aidera quelqu'un d'autre à courir dans ce domaine …