钥匙串用法(用于免费/非免费版本)

时间:2016-09-26 19:47:08

标签: ios objective-c keychain

我是关键链的新手,并试图将我的应用内容与其分开。

使用此代码设置I' m的类型

KeychainItemWrapper *keychain = [[KeychainItemWrapper alloc] initWithIdentifier:@"TestUDID" accessGroup:nil];
[keychain setObject:@"free" forKey:(__bridge id)kSecAttrAccount];

得到这样的

KeychainItemWrapper *keychain = [[KeychainItemWrapper alloc] initWithIdentifier:@"TestUDID" accessGroup:nil];    
NSLog(@"%@",[keychain objectForKey:(__bridge id)kSecAttrAccount]);

因此,每次我需要检查应用程序版本时,我应该创建一个keychain包装器对象并获取key的对象。我该如何简化它?

我正在考虑创建全局bool变量。还有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

您示例中的全局变量是有害的。你的应用程序变得混乱(特别是在多线程中)。仅对常量使用全局变量。 使用静态方法创建一个类(如果需要商店属性,则创建单例),例如AppInfo,您将在其中放置有关应用程序的信息。

// AppInfo.h
@interface AppInfo : NSObject

// (class) available in Xcode 8
@property (class) id appVersion;

@end

// AppInfo.m
@implementation AppInfo 

+ (KeychainItemWrapper *)keychain {
  return [[KeychainItemWrapper alloc] initWithIdentifier:@"TestUDID" accessGroup:nil];
}

+ (NSString *)appVersion {
  return [self.keychain objectForKey:(__bridge id)kSecAttrAccount];
}

+ (void)setAppVersion:(NSString *)appVersion {
  [self.keychain setObject:appVersion forKey:(__bridge id)kSecAttrAccount];
}

@end