钥匙串使用(用于分离 free/nonfree 版本)
keychains usage (for separation free/nonfree version)
我是钥匙串的新手,正在尝试将我的应用程序内容与它分开。
我使用此代码设置版本类型
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]);
因此,每次我需要检查应用程序版本时,我都应该创建一个钥匙串包装器对象并获取密钥对象。我怎样才能简化它?
我正在考虑创建全局 bool 变量。有没有更好的办法?
您示例中的全局变量是有害的。您的应用程序变得混乱(尤其是在多线程中)。仅对常量使用全局变量。
使用静态方法创建一个 class(如果您想要存储属性,则使用单例),例如,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
我是钥匙串的新手,正在尝试将我的应用程序内容与它分开。
我使用此代码设置版本类型
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]);
因此,每次我需要检查应用程序版本时,我都应该创建一个钥匙串包装器对象并获取密钥对象。我怎样才能简化它?
我正在考虑创建全局 bool 变量。有没有更好的办法?
您示例中的全局变量是有害的。您的应用程序变得混乱(尤其是在多线程中)。仅对常量使用全局变量。
使用静态方法创建一个 class(如果您想要存储属性,则使用单例),例如,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