ios – 应用程序从iTunes更新后,Keychain不会保留数据

我一直在使用 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;
}

在这里,我生成了一个独特的设备字符串,并使用钥匙串存储相同的应用程序和应用程序在很大程度上取决于唯一的字符串/设备标识符,因为从iOS5到iOS7,Apple在与唯一设备标识符有关的过程中进行了大量的转换,因为方法已被弃用.

适用于Store&amp ;;的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");
    }
}

因此,当应用程序从Apple更新时,钥匙串将无法保留其值/标识符,或者我在某些时候错过了.请帮助将标识符永久存储在设备中,与安装,卸载,重置和更新应用程序无关.

或者,是否有任何API,它可以在生成时为我提供相同的deviceID /唯一字符串,因此需要存储唯一字符串?

注意:App必须支持iOS 4.3及更高版本.

解决方法

你应该看看 this answer.你现在面临的问题实际上是失去了对你的捆绑种子ID(你的捆绑ID之前的10个符号的字母数字代码)绑定的钥匙串组的访问权限,这是你的团队标识符.因此,基本上,应用更新后访问钥匙串取决于您使用的分发证书,而不是像@ PF1中提到的配置文件.
为了证明我的观点,我建议你尝试以下步骤:

>在iTunes Connect中为您的应用添加新版本.>使其“准备上传”.>在会员中心向自己发放新的分发证书.>创建两个新的appstore配置文件 – 一个包含您的旧/第二个新证书.>创建两个档案,就像您通常所做的那样将应用程序提交到App Store – 一个带有旧/秒的新证书.>验证两者.具有新证书的证书将提供验证警告,即此版本将丢失对钥匙串组的访问权限.

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...