Guardar cualquier object en Keychain

Quiero save un object que podría include datos confidenciales en el llavero. Para lograr esto, convertiré este object en una instancia de NSData.

Estoy un poco confundido sobre los attributes que necesito usar. ¿Está bien usar kSecClassGenericPassword como kSecClass aunque no sea realmente una contraseña? Además, he configurado la kSecAttrAccount . He leído en algún lado que también necesito agregar kSecAttrService . ¿Qué implicaciones pueden suceder si no lo hago?

Comtesting SSKeychain en GitHub. Es un bonito contenedor de código abierto para el llavero que lo hace muy fácil de usar. Si quieres saber más sobre cómo funciona el llavero y la security en iOS / OS X y estás registrado en el Progtwig de desarrolladores de Apple, hay pocos videos de session de WWDC que puedes consultar en developer.apple.com .

Vea esta biblioteca: https://github.com/nicklockwood/FXKeychain

- (BOOL)setObject:(id)object forKey:(id)key; - (BOOL)setObject:(id)object forKeyedSubscript:(id)key; 

Ejemplo básico:

 #import "ViewController.h" #import "FXKeychain.h" @interface ViewController () <UITextFieldDelegate, UITextViewDelegate> @property (nonatomic, strong) IBOutlet UITextField *keyField; @property (nonatomic, strong) IBOutlet UITextView *dataField; @end @implementation ViewController - (IBAction)save { //save data [FXKeychain defaultKeychain][_keyField.text] = _dataField.text; } - (IBAction)load { //load data _dataField.text = [FXKeychain defaultKeychain][_keyField.text]; } - (IBAction)delete { //clear field _dataField.text = @""; //delete data [[FXKeychain defaultKeychain] removeObjectForKey:_keyField.text]; } - (IBAction)tap { [_keyField resignFirstResponder]; [_dataField resignFirstResponder]; } - (BOOL)textFieldShouldReturn:(UITextField *)textField { [textField resignFirstResponder]; return YES; } @end 

Strongbox está utilizando NSKeyedUnarchiver para convertir cualquier tipo conforme a NSCoding al object NSData antes de save en keychain.