我一直在使用SSKeychain开源库来在我的iOS应用程序中安全存储数据。昨天,当我从iTunes更新我的应用程序从v1.0到v2.0时,SSKeychain无法保留其数据,出现了问题。
UUID生成代码:
- (NSString *)createNewUUID
{
CFUUIDRef theUUID = CFUUIDCreate(NULL);
CFStringRef string = CFUUIDCreateString(NULL, theUUID);
CFRelease(theUUID);
return (__bridge NSString *)string;
}
在这里,我生成了一个唯一的设备字符串,并使用
keychain
来存储该字符串。由于从iOS5到iOS7,苹果对Unique Device Identifier
进行了很多转换,因此应用程序强烈依赖于唯一字符串/设备标识符。以下是“存储和检索”的代码片段:NSString *retrieveuuid = [SSKeychain passwordForService:@"com.name.appname" account:@"AppName"];
if (retrieveuuid == nil) {
NSString *uuid = [self createNewUUID];
//Store the password in Keychain
NSError *error = nil;
[SSKeychain setPassword:uuid forService:@"com.name.appname" account:@"AppName" error:&error];
if ([error code] == SSKeychainErrorNotFound) {
NSLog(@"ID not found");
}
}
那么,当应用程序从苹果更新时,钥匙串是否无法保留其值/标识符?还是我错过了某些点。如果可能的话,请帮忙将标识符永久存储在设备中,与安装、卸载、重置和更新应用程序无关。
或者,是否有任何API可以提供相同的设备ID/唯一字符串,因此需要存储唯一字符串?
注意:应用程序必须支持iOS 4.3及以上版本。