iOS 앱에 로그인 화면이 있습니다. 사용자 이름과 비밀번호는에 다시 저장되고 NSUserDefaults
앱을 다시 입력 할 때 로그인 화면에 다시로드됩니다 (물론 NSUserDefaults
영구적 임).
이제 사용자는 사용자 이름 / 암호 저장 기능을 비활성화 할 수 있습니다.
그래서 NSUserDefaults
그때는 지워질 것입니다.
그러나 내 응용 프로그램에는 사용자의 데이터베이스 쿼리 에이 사용자 이름 / 암호가 필요합니다. 따라서 : 제외하고 데이터를 저장할 위치는 NSUserDefaults
? (이 장소는 사용자가 앱을 종료하거나 로그 아웃 할 때 삭제해야합니다.)
답변
항상 키 체인을 사용하여 사용자 이름과 비밀번호를 저장해야하며, 사용자 이름과 비밀번호는 안전하게 저장되고 앱에서만 액세스 할 수 있으므로 앱이 종료 될 때 (필요한 경우) 삭제할 필요가 없습니다.
Apple은 키 체인 항목을 저장, 읽기 및 삭제하는 샘플 코드 를 제공 하며 키 체인 사용을 크게 단순화하는 샘플에서 키 체인 래퍼 클래스를 사용하는 방법은 다음과 같습니다.
Security.framework를 포함하십시오 (Xcode 3에서 frameworks 폴더를 마우스 오른쪽 버튼으로 클릭하고 기존 프레임 워크를 추가하십시오. Xcode 4에서 프로젝트를 선택한 다음 대상을 선택하고 Build Phases 탭으로 이동 한 다음 Link Binary with Files 아래에서 +를 클릭하십시오) 및 KeychainItemWrapper .h &. m 파일을 프로젝트로 # 키 체인을 사용해야하는 곳마다 .h 파일을 가져온 다음이 클래스의 인스턴스를 만듭니다.
KeychainItemWrapper *keychainItem = [[KeychainItemWrapper alloc] initWithIdentifier:@"YourAppLogin" accessGroup:nil];
( YourAppLogin 은 키 체인 아이템을 호출하기 위해 선택한 모든 것이 될 수 있으며 필요한 경우 여러 아이템을 가질 수 있습니다)
그런 다음 다음을 사용하여 사용자 이름과 비밀번호를 설정할 수 있습니다.
[keychainItem setObject:@"password you are saving" forKey:kSecValueData];
[keychainItem setObject:@"username you are saving" forKey:kSecAttrAccount];
다음을 사용하여 가져 오십시오.
NSString *password = [keychainItem objectForKey:kSecValueData];
NSString *username = [keychainItem objectForKey:kSecAttrAccount];
또는 다음을 사용하여 삭제하십시오.
[keychainItem resetKeychainItem];
답변
여기에 래퍼의 ARC 버전이 필요하면 링크입니다 https://gist.github.com/1170641
덕분에
답변
키 체인 을 통한 매우 쉬운 솔루션 .
시스템 키 체인을위한 간단한 래퍼입니다. 그냥 추가 SSKeychain.h
, SSKeychain.m
, SSKeychainQuery.h
및 SSKeychainQuery.m
프로젝트에 파일을 당신의 목표에 Security.framework를 추가합니다.
비밀번호를 저장하려면
[SSKeychain setPassword:@"AnyPassword" forService:@"AnyService" account:@"AnyUser"]
비밀번호를 검색하려면 다음을 수행하십시오.
NSString *password = [SSKeychain passwordForService:@"AnyService" account:@"AnyUser"];
setPassword
저장하려는 값은 어디에 있고 저장하려는 forService
변수는 어디에 있고 계정은 암호 및 기타 정보의 사용자 / 개체에 대한 것입니다.
답변
당신은 간단하게 사용할 수 있습니다 NSURLCredential
, 그것은 단지 두 줄의 코드로 키 체인에 사용자 이름과 암호를 모두 저장합니다 .
자세한 답변을 참조하십시오 .
답변
Obj-C와 ARC를 사용하여 iOS 8에서 키 체인을 사용하는 방법에 대답하기로 결정했습니다.
1) GIST의 keychainItemWrapper (ARCifief 버전)를 사용했습니다 :
https://gist.github.com/dhoerl/1170641/download-KeychainItemWrapper.h
및 .m을 프로젝트에 추가 (+ 복사)하십시오.
2) 프로젝트에 보안 프레임 워크 추가 (프로젝트> 빌드 단계> 바이너리와 라이브러리 링크 확인)
3) 키 체인을 사용하려는 .h 및 .m 파일에 보안 라이브러리 (#import) 및 KeychainItemWrapper (#import “KeychainItemWrapper.h”)를 추가하십시오.
4) 키 체인에 데이터를 저장하려면 :
NSString *emailAddress = self.txtEmail.text;
NSString *password = self.txtPasword.text;
//because keychain saves password as NSData object
NSData *pwdData = [password dataUsingEncoding:NSUTF8StringEncoding];
//Save item
self.keychainItem = [[KeychainItemWrapper alloc] initWithIdentifier:@"YourAppLogin" accessGroup:nil];
[self.keychainItem setObject:emailAddress forKey:(__bridge id)(kSecAttrAccount)];
[self.keychainItem setObject:pwdData forKey:(__bridge id)(kSecValueData)];
5) 데이터 읽기 (로드시 로그인 화면> viewDidLoad) :
self.keychainItem = [[KeychainItemWrapper alloc] initWithIdentifier:@"YourAppLogin" accessGroup:nil];
self.txtEmail.text = [self.keychainItem objectForKey:(__bridge id)(kSecAttrAccount)];
//because label uses NSString and password is NSData object, conversion necessary
NSData *pwdData = [self.keychainItem objectForKey:(__bridge id)(kSecValueData)];
NSString *password = [[NSString alloc] initWithData:pwdData encoding:NSUTF8StringEncoding];
self.txtPassword.text = password;
즐겨!
