Bazen Xcode'dan cihazda bir uygulama çalıştırdığımda, anahtar zincirine erişmeye çalışırdım ancak -34018 hatası nedeniyle başarısız oluyorum. Bu, belgelenmiş anahtar zinciri hata kodlarının hiçbiriyle eşleşmez ve tutarlı bir şekilde çoğaltılamaz. (belki zamanın% 30'unda olur ve neden olduğu benim için net değil). Bu problemde hata ayıklamayı çok zorlaştıran şey, dokümantasyon eksikliğidir. Buna neyin sebep olduğu ve nasıl düzeltileceği hakkında bir fikriniz var mı? Xcode 5 kullanıyorum ve cihazda iOS 7.0.4 çalıştırıyorum.
Burada bununla ilgili açık bir sorun var: https://github.com/soffes/sskeychain/issues/52
DÜZENLEME: İstek başına anahtar zinciri erişim kodu ekleme
SSKeychain
Kütüphaneyi anahtarlık ile arayüz oluşturmak için kullanıyorum . İşte pasaj.
#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
Çoğu zaman gayet iyi. Bazen, anahtar zincirine yazamadığım veya anahtar zincirinden okuyamadığım ve kritik onaylama başarısızlığına neden olan iddia başarısızlıklarına rastlarım.