iOS의 KeyChain에 대해 느슨하게 정리
13282 단어 XcodeiOS키체인Objective-C
KeyChain이란?
자꾸 쓰면
또한 KeyChain에서 관리하는 정보는 암호화되어 있습니다.
사용자의 정보를 보존하는 구조로서
UserDefaults
가 있습니다만, 이것은 설정 파일등의 preference 정보를 관리하기 위한 구조.UserDefaults와의 차이
준비
프로젝트 만들기
Framework 추가
Linked Frameworks and Libraries
에서 Security.framework
를 추가합니다.라이브러리 설치
이번에는 KeyChain의 편리한 라이브러리를 사용합니다.
TheLevelUp/LUKeychainAccess
Podfile
pod 'LUKeychainAccess', '~> 1.2'
$ pod install
$ open PROJECT_NAME.xcworkspace/
KeyChain 준비
KeyChain Group은 내 경우에는
moe.nnsnodnb.*
의 앱간에 협력 할 수 있습니다.Google이 출시된 앱은 이 KeyChain Group을 사용하여 처음 로그인한 이후 자동으로 로그인할 수 있게 되어 있지 않습니까?
준비는 일단 완료! !
액세스 제어
KeyChain은 앱을 삭제해도 데이터가 남아 있다고 하는 것으로 액세스 제어가
Accessible属性
로서 존재하고 있습니다.이번은
LUKeychainAccess
에 구현되고 있다 Accessible属性
Accessible 속성
개요
LUKeychainAccessAttrAccessibleAfterFirstUnlock
재부팅 후 첫 번째 잠금 해제 이후/다음 재부팅까지
LUKeychainAccessAttrAccessibleAfterFirstUnlockThisDeviceOnly
재부팅 후 첫 번째 잠금 해제 이후/다음 재부팅까지
LUKeychainAccessAttrAccessibleAlways
항상 액세스 가능
LUKeychainAccessAttrAccessibleAlwaysThisDeviceOnly
항상 액세스 가능
LUKeychainAccessAttrAccessibleWhenUnlocked
장치가 잠금 해제된 상태
LUKeychainAccessAttrAccessibleWhenUnlockedThisDeviceOnly
장치가 잠금 해제된 상태
같은 느낌
주의
test
가 다르기 때문에 KeyChain 액세스를 앱간에 할 수 없습니다 소스 코드
이번에는 버튼을 누르면 "고이즈미 하나요 짱"이라는 문자가 출력되는 것을 만들었습니다.
ViewController.m
#import "ViewController.h"
#import <LUKeychainAccess/LUKeychainAccess.h>
@interface ViewController ()
@property (weak, nonatomic) IBOutlet UILabel *label;
- (IBAction)callKeyChain:(id)sender;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
LUKeychainAccess *keychainAccess = [LUKeychainAccess standardKeychainAccess];
keychainAccess.accessibilityState = LUKeychainAccessAttrAccessibleWhenUnlocked;
[[LUKeychainAccess standardKeychainAccess] setString:@"小泉花陽ちゃん" forKey:@"rice"];
self.label.hidden = YES;
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
}
- (IBAction)callKeyChain:(id)sender {
self.label.hidden = NO;
self.label.text = [[LUKeychainAccess standardKeychainAccess] stringForKey:@"rice"];
}
@end
실행 샘플
다양한 유형을 KeyChain에 관리
TestKeyChain.m
#import <XCTest/XCTest.h>
#import <LUKeychainAccess/LUKeychainAccess.h>
@interface sample_keychainTests : XCTestCase
@end
@implementation sample_keychainTests
- (void)setUp {
[super setUp];
// integer
[[LUKeychainAccess standardKeychainAccess] setInteger:1 forKey:@"integerKey"];
// float
[[LUKeychainAccess standardKeychainAccess] setFloat:1.0 forKey:@"floatKey"];
// double
[[LUKeychainAccess standardKeychainAccess] setDouble:1.0 forKey:@"doubleKey"];
// BOOL
[[LUKeychainAccess standardKeychainAccess] setBool:YES forKey:@"boolKey"];
// NSString
[[LUKeychainAccess standardKeychainAccess] setString:@"string" forKey:@"stringKey"];
// NSObject
[[LUKeychainAccess standardKeychainAccess] setObject:@"object" forKey:@"objectKey"];
}
- (void)tearDown {
[super tearDown];
}
- (void)testKeyChain {
XCTAssertEqual([[LUKeychainAccess standardKeychainAccess] integerForKey:@"integerKey"], 1);
XCTAssertEqual([[LUKeychainAccess standardKeychainAccess] floatForKey:@"floatKey"], 1.0);
XCTAssertEqual([[LUKeychainAccess standardKeychainAccess] doubleForKey:@"doubleKey"], 1.0);
XCTAssertEqual([[LUKeychainAccess standardKeychainAccess] boolForKey:@"boolKey"], YES);
XCTAssertEqualObjects([[LUKeychainAccess standardKeychainAccess] stringForKey:@"stringKey"], @"string");
XCTAssertEqualObjects([[LUKeychainAccess standardKeychainAccess] objectForKey:@"objectKey"], @"object");
}
@end
참고
Reference
이 문제에 관하여(iOS의 KeyChain에 대해 느슨하게 정리), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/nnsnodnb/items/3bad8209ee4bbd5139ee텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)