我一直在使用SSKeychain開放源代碼庫來安全地在我的iOS應用程序中存儲數據。昨天,我遇到了一個問題,當我將我的應用程序從iTunes更新到v2.0時,SSKeychain無法保留其數據。應用程序從iTunes更新後,鑰匙串不保留數據
的UUID代碼:
- (NSString *)createNewUUID
{
CFUUIDRef theUUID = CFUUIDCreate(NULL);
CFStringRef string = CFUUIDCreateString(NULL, theUUID);
CFRelease(theUUID);
return (__bridge NSString *)string;
}
在這裏,我產生一個唯一的設備字符串和使用的keychain
存儲相同和應用嚴重,因爲從iOS5的依賴於唯一的字符串/設備標識符iOS7中有很多由蘋果公司在Unique Device Identifier
中完成的轉換,因爲這些方法已被棄用。
應付片段店鋪& Retrive:
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");
}
}
所以,這是東西,keychain將無法保留其值/標識,當應用程序被蘋果更新還是我失去了在某個時間點。如果可以將標識符永久存儲在設備中,請提供幫助,與安裝,卸載,重置和更新應用程序無關。
或者,是否有任何API,它可以提供我相同的deviceID /唯一字符串生成時需要存儲唯一字符串?
注意:應用程序必須支持iOS 4.3及以上版本。
概念,鑰匙鏈項目應用程序升級後繼續存在,因此它可能會在使用SSKeychain的故障。升級後它是否會消失一次,或者升級後每次都無法存儲密碼?代碼中的哪個位置執行Store&Retrieve? – WDUK
爲什麼在設置密碼時檢查'NotFound'錯誤代碼?它應該返回一個BOOL是否成功。我也找不到'SSKeychainErrorNotFound'的文檔,這是你(或其他人)的擴展嗎? – WDUK
我還會檢查權利文件。確保鑰匙串訪問組 在舊的App Store版本的授權文件和新版本中具有相同的值。 –
almas