测试已测试 | ✓ |
Lang语言 | Obj-CObjective C |
许可 | BSD |
发布最后发布 | 2016年9月 |
SPM支持 SPM | ✓ |
由Ryan Dignard 和 Ryan Dignard 维护。
RGLockbox 是一个使用标准的密钥链的简单界面。使用面向对象的方法,可以轻松选择一个密钥并将任何基本值存储在那里。
此 pod 的 Swift 版本名为 RGSwiftKeychain
,并在 swift-master 分支上可用。
默认支持的数据类型包括
NSData
NSString
NSDate
NSDictionary
NSArray
id<NSCoding>
NSURL
NSValue
(包括 NSNumber
和 NSDecimalNumber
)NSNull
注意:出于安全考虑,Apple 鼓励开发者根据其对象符合 NSSecureCoding
而不是 NSCoding
,以防止对您的应用程序进行替换攻击。
NSData* data = [@"abcd" dataWithEncoding:NSUTF8StringEncoding];
RGLockbox* lockbox = [RGLockbox manager];
[lockbox setData:data forKey:@"myData"];
写入数据就像创建它并将其应用于密钥链管理器一样简单。默认情况下,这些管理器命名空间为您的束标识符。
RGLockbox* lockbox = [RGLockbox manager];
NSData* data = [lockbox dataForKey:@"myData"];
NSString* string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
assert([string isEqual:@"abcd"]);
获取数据就像记住您的密钥一样简单,前提是您在整个过程中使用相同的管理器。混合使用具有不同命名空间的管理器是可能的,但更是一种高级用法。
除了支持读取和写入原始 NSData
的基本接口外,还有对各种类型的隐式支持。例如 NSDate
NSDate* date = [NSDate new];
RGLockbox* lockbox = [RGLockbox manager];
[lockbox setDate:date forKey:@"myDate"];
NSDate* readDate = [lockbox dateForKey:@"myDate"];
assert([readDate timeIntervalSince1970] == [date timeIntervalSince1970]);
NSString
:
NSString* string = @"aString";
RGLockbox* lockbox = [RGLockbox manager];
[lockbox setString:string forKey:@"stringKey"];
NSString* readString = [lockbox stringForKey:@"stringKey"];
assert([readString isEqual:string]);
NSDictionary
:
NSDictionary* dictionary = @{ @"aKey" : @"aValue" };
RGLockbox* lockbox = [RGLockbox manager];
[lockbox setJSONObject:dictionary forKey:@"dictionaryKey"];
NSDictionary* readDictionary = [lockbox JSONObjectForKey:@"dictionaryKey"];
assert([readDictionary isEqual:dictionary]);
NSArray
:
NSArray* array = @[ @"aValue1", @"aValue2" ];
RGLockbox* lockbox = [RGLockbox manager];
[lockbox setJSONObject:array forKey:@"arrayKey"];
NSArray* readArray = [lockbox JSONObjectForKey:@"arrayKey"];
assert([readArray isEqual:array]);
id<NSCoding>
:
NSURL* url = [NSURL URLWithString:@"google.com"];
RGLockbox* lockbox = [RGLockbox manager];
[lockbox setCodeable:url forKey:@"urlKey"];
NSURL* readURL = [lockbox codeableForKey:@"urlKey"];
assert([readURL isEqual:url]);
最后,这个库支持任意的命名空间,这使得可以在应用程序束之间共享密钥链数据,以及为高级用法设置不同的项可访问性。
NSDate* signupDate = [NSDate dateWithTimeIntervalSince1970:1453075980.0];
RGLockbox* lockbox = [[RGLockbox alloc] initWithNamespace:@"com.rglockbox.appbundle" accessibility:kSecAttrAccessibleAlways];
[lockbox setDate:signup forKey:@"userSignupDate"];
/* In another program, app extension, component framework, etc. ... */
RGLockbox* lockbox = [[RGLockbox alloc] initWithNamespace:@"com.rglockbox.appbundle" accessibility:kSecAttrAccessibleAlways];
NSDate* signupDate = [lockbox dateForKey:@"userSignupDate"];
assert([signupDate timeIntervalSince1970] == 1453075980.0);
使用 Cocoapods 将 pod 'RGLockbox'
添加到您的 Podfile,并运行 pod install
BSD 简化(2条款)