Parfois, lorsque j'exécute une application sur un appareil à partir de Xcode, j'essaie d'accéder au trousseau mais j'échoue en raison de l'erreur -34018. Cela ne correspond à aucun des codes d'erreur du trousseau documentés et ne peut pas être reproduit de manière cohérente. (cela arrive peut-être 30% du temps, et je ne sais pas pourquoi cela se produit). Ce qui rend le débogage de ce problème très difficile, c'est le manque total de documentation. Une idée de ce qui cause cela et comment y remédier? J'utilise Xcode 5 et j'exécute iOS 7.0.4 sur l'appareil.
Il y a un problème ouvert à ce sujet ici: https://github.com/soffes/sskeychain/issues/52
EDIT: Ajout du code d'accès au trousseau par demande
J'utilise la SSKeychain
bibliothèque pour m'interfacer avec le trousseau. Voici l'extrait.
#define SERVICE @"default"
@implementation SSKeychain (EXT)
+ (void)setValue:(NSString *)value forKey:(NSString *)key {
NSError *error = nil;
BOOL success = NO;
if (value) {
success = [self setPassword:value forService:SERVICE account:key error:&error];
} else {
success = [self deletePasswordForService:SERVICE account:key error:&error];
}
NSAssert(success, @"Unable to set keychain value %@ for key %@ error %@", value, key, error);
if (!success) {
LogError(@"Unable to set value to keychain %@", error);
}
LogTrace(@"Will set keychain account %@. is to nil? %d", key, value == nil);
if (value == nil)
LogWarn(@"Setting keychain %@ to nil!!!", key);
}
+ (NSString *)valueForKey:(NSString *)key {
NSError *error = nil;
NSString *value = [self passwordForService:SERVICE account:key error:&error];
if (error && error.code != errSecItemNotFound) {
NSAssert(!error, @"Unable to retrieve keychain value for key %@ error %@", key, error);
LogError(@"Unable to retrieve keychain value for key %@ error %@", key, error);
}
return value;
}
+ (BOOL)removeAllValues {
LogInfo(@"Completely Reseting Keychain");
return [[self accountsForService:SERVICE] all:^BOOL(NSDictionary *accountInfo) {
return [self deletePasswordForService:SERVICE account:accountInfo[@"acct"]];
}];
}
@end
La grande majorité du temps, c'est très bien. Parfois, je rencontre des échecs d'assertion où je suis incapable d'écrire ou de lire à partir du trousseau, provoquant un échec d'assertion critique.