2014-02-07 86 views
6

我一直在使用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及以上版本。

+3

概念,鑰匙鏈項目應用程序升級後繼續存在,因此它可能會在使用SSKeychain的故障。升級後它是否會消失一次,或者升級後每次都無法存儲密碼?代碼中的哪個位置執行Store&Retrieve? – WDUK

+1

爲什麼在設置密碼時檢查'NotFound'錯誤代碼?它應該返回一個BOOL是否成功。我也找不到'SSKeychainErrorNotFound'的文檔,這是你(或其他人)的擴展嗎? – WDUK

+1

我還會檢查權利文件。確保鑰匙串訪問組在舊的App Store版本的授權文件和新版本中具有相同的值。 – almas

回答

1

對於遇到類似問題的其他人,我在本地測試並試圖手動升級應用程序時遇到此問題。我嘗試用Xcode的本地副本(使用我的團隊配置配置文件配置)覆蓋我的設備上的版本(配置了App Store配置文件)。正如almas在評論中指出的那樣,鑰匙鏈似乎與用於構建的配置文件相關聯。當我提交給Apple並更新了我的應用程序時,SSKeychain工作得很好。

0

據我記得我們有一個類似的問題,與配置文件也發生了變化有關。只是一個提示。 +1到PF1

3

你應該看看this answer。您現在面臨的問題實際上是無法訪問捆綁到您的捆綁種子ID(捆綁ID之前的10個符號字母數字代碼)的鑰匙串組,這是您的團隊標識符。因此,基本上,在應用程序更新之後訪問鑰匙串取決於您使用的分發證書,而不是像@ PF1提到的配置文件。
爲了證明我的觀點,我建議您嘗試以下步驟:

  1. 添加一個新的版本,在iTunes Connect您的應用程序。
  2. 使其「準備上傳」。
  3. 在會員中心向你自己發行新的發行證書。
  4. 創建兩個新的應用程序供應配置文件 - 一個與您的舊/第二個與您的新證書。
  5. 創建兩個檔案,就像您通常會將應用程序提交到App Store一樣 - 您的舊/新檔案會與您的新證書一起提交。
  6. 同時驗證。具有新證書的那個人將給出驗證警告,即該版本對鑰匙串組的訪問將會丟失。
+0

我的問題是,我用來上傳應用程序到應用程序商店的分發證明現在已過期,我必須申請一個新的證書才能更新應用程序。我現在能做什麼? – user3687

+0

我不確定,但我認爲seed id應該被重用。無論如何,除了頒發新證書外,您還沒有任何其他變體...試着告訴我們它是如何發生的。 –

+0

問題是我剛剛創建了一個AdHoc .ipa,其包標識符與我用來上傳應用商店版本的標識符完全相同。但是,當我安裝應用程序的應用程序商店版本鑰匙串重置。 – user3687

1

我知道是一個老問題,但我留下這個答案,以防萬一它會對某人有用。我在兩個版本中都使用相同的權利來修復它。

enter image description here

enter image description here

相關問題