钥匙串使用(用于分离 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