//
// ViewController.m
// KeyChine test
//
// Created by mac on 2019/12/5.
// Copyright © 2019 mac All rights reserved.
//
#import "ViewController.h"
#import <Security/Security.h>
static NSString *server = @"www.example.com";
@interface ViewController ()
@property (weak, nonatomic) IBOutlet UITextField *tf;
@property (nonatomic)BOOL existingPassword;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
/* See:
https://developer.apple.com/documentation/security/keychain_services/keychain_items/searching_for_keychain_items?language=objc
*/
// query from keychine
_existingPassword = NO;
NSDictionary *query = @{(NSString *)kSecClass:(NSString *)kSecClassInternetPassword,
(NSString *)kSecMatchLimit:(NSString *)kSecMatchLimitOne,
(NSString *)kSecAttrServer:server,
(NSString *)kSecReturnAttributes:(id) kCFBooleanTrue ,
(NSString *)kSecReturnData:(id) kCFBooleanTrue
};
CFTypeRef attrResult;
NSMutableDictionary *attrQuery = [query mutableCopy];
OSStatus stauts = SecItemCopyMatching((CFDictionaryRef)attrQuery, &attrResult);
if (stauts != noErr) {
NSLog(@"error===>");
} else {
NSLog(@"get successful!!!");
_existingPassword = YES;
NSDictionary *resultDic = (__bridge NSDictionary *)attrResult;
NSData *pwdata = resultDic[(NSString *)kSecValueData];
self.tf.text = [[NSString alloc] initWithData:pwdata encoding:NSUTF8StringEncoding];
}
}
- (IBAction)saveBtnClick:(id)sender {
NSString *username = @"lixiaoyi";
NSString *password = self.tf.text;
if (!_existingPassword) {
NSDictionary *query = @{(NSString *)kSecClass:(NSString *)kSecClassInternetPassword,
(NSString *)kSecAttrAccount:username,
(NSString *)kSecAttrServer:server,
(NSData *)kSecValueData:[password dataUsingEncoding:NSUTF8StringEncoding]
};
OSStatus stauts = SecItemAdd((CFDictionaryRef)query, NULL);
if (stauts != noErr) {
NSLog(@"error===>");
} else {
NSLog(@"save successful!!!");
}
} else {
NSDictionary *query = @{(NSString *)kSecClass:(NSString *)kSecClassInternetPassword,
(NSString *)kSecAttrAccount:username,
(NSString *)kSecAttrServer:server,
(NSData *)kSecValueData:[password dataUsingEncoding:NSUTF8StringEncoding]
};
NSDictionary *udpateDic = @{(NSString *)kSecValueData:[password dataUsingEncoding:NSUTF8StringEncoding]};
OSStatus stauts = SecItemUpdate((CFDictionaryRef)query,(CFDictionaryRef) udpateDic);
if (stauts != noErr) {
NSLog(@"error===>");
} else {
NSLog(@"save successful!!!");
}
}
}
@end