Aja*_*rma 7 keychain uniqueidentifier ios ios5 sskeychain
我一直在使用SSKeychain开源库在我的iOS应用程序中安全地存储数据.昨天,我遇到了一个问题,当我从iTunes将v1.0从v1.0更新到v2.0时,SSKeychain无法保留其数据.
UUID生成代码:
- (NSString *)createNewUUID
{
CFUUIDRef theUUID = CFUUIDCreate(NULL);
CFStringRef string = CFUUIDCreateString(NULL, theUUID);
CFRelease(theUUID);
return (__bridge NSString *)string;
}
Run Code Online (Sandbox Code Playgroud)
在这里,我生成了一个独特的设备字符串并用于keychain存储相同的设备字符串,并且应用程序在很大程度上依赖于唯一的字符串/设备标识符,因为从iOS5到iOS7 Unique Device Identifier,由于方法已被弃用,因此Apple会进行大量的转换.
适用于Store&Retrive的Cope代码段:
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");
}
}
Run Code Online (Sandbox Code Playgroud)
因此,当应用程序从Apple更新时,钥匙串将无法保留其值/标识符,或者我在某些时候错过了.请帮助将标识符永久存储在设备中,与安装,卸载,重置和更新应用程序无关.
或者,是否有任何API,它可以在生成时为我提供相同的deviceID /唯一字符串,因此需要存储唯一字符串?
注意: App必须支持iOS 4.3及更高版本.
你应该看看这个答案。您现在面临的问题实际上是无法访问钥匙串组,该组与您的捆绑包种子 ID(捆绑包 ID 之前的 10 个符号字母数字代码)相关联,这是您的团队标识符。因此,基本上,应用程序更新后对钥匙串的访问取决于您使用的分发证书,而不是像@PF1提到的配置文件。
为了证明我的观点,我建议您尝试以下步骤:
对于遇到类似问题的其他人,我在本地测试并尝试手动升级应用程序时遇到了这个问题。我尝试使用 Xcode 中的本地副本(使用我的团队配置文件配置)覆盖我的设备上的版本(使用 App Store 配置文件配置)。正如 almas 在评论中指出的那样,钥匙串似乎与用于构建的配置文件相关联。当我向 Apple 提交并更新我的应用程序时,SSKeychain 工作得很好。
| 归档时间: |
|
| 查看次数: |
2618 次 |
| 最近记录: |