También tuve este problema, y me tomó por siempre para averiguar
Hay una versión de "KeychainWrapper" flotando alrededor que lo tiene es SecItemUpdate dentro de un NSAssert (entre otras cosas).
¡Quienquiera que haya hecho esto es un imbécil !, al compilar para su lanzamiento/distribución, cada NSAssert queda anulado, lo que significa que el código ni siquiera se ejecuta.
Por ejemplo:
NSAssert(SecItemUpdate((CFDictionaryRef)updateItem, (CFDictionaryRef)tempCheck), @"Couldn't update the Keychain Item.");
necesita convertirse en
OSStatus status = SecItemUpdate((CFDictionaryRef)updateItem, (CFDictionaryRef)tempCheck);
NSAssert(status == noErr, @"Couldn't update the Keychain Item.");
Aviso cómo el SecItemUpdate real se mueve fuera de la NSAssert, y en su lugar el resultado se comprobó
Nota importante: Intentando actualizar un valor para kSecValueData, sin especificar también un valor para kSecAttrAccount, hará que la aserción también falle. Por lo tanto, si su intención es la de almacenar una única serie de datos sensibles (tales como una lista de números de tarjetas de crédito), asegúrese de guardar un poco de texto "nombre de cuenta" en el atributo kSecAttrAccount, así:
static NSString* kCardListXML = @"cardListXML";
static NSString* cardListAccountName = @"cardListAccount";
-(void)setCardListXML:(NSString*)xml {
KeychainItemWrapper* wrapper =
[[KeychainItemWrapper alloc] initWithIdentifier:kCardListXML accessGroup:nil];
[wrapper setObject:cardListAccountName forKey:(id)CFBridgingRelease(kSecAttrAccount)];
[wrapper setObject:xml forKey:(id)CFBridgingRelease(kSecValueData)];
}
-(NSString*)getCardListXML {
KeychainItemWrapper* wrapper =
[[KeychainItemWrapper alloc] initWithIdentifier:kCardListXML accessGroup:nil];
[wrapper setObject:cardListAccountName forKey:(id)CFBridgingRelease(kSecAttrAccount)];
return [wrapper objectForKey:CFBridgingRelease(kSecValueData)];
}
Lo había descubierto y este era esencialmente el problema. Gracias. – iHorse
Parece que se corrigió en v1.2 de KeychainWrapper, disponible en el código de ejemplo de Xcode – Olaf