2014-10-09 61 views
3

相當長一段時間以來,我一直使用KeychainItemWrapper的ARC版本成功讀取和寫入私人鑰匙串項目。指定訪問組時KeychainItemWrapper出錯

我現在正在將我的iOS應用程序轉換爲使用共享訪問組,以便我的2個共享相同應用程序前綴的應用程序可以訪問這些鑰匙串項目。在功能部分,我已經添加了鑰匙串組「MYAPPPREFIX.MYSHAREDACCESSNAME」

我使用這些行寫我的變量鑰匙串組:

keychainItemWrapper = [[KeychainItemWrapper alloc] initWithIdentifier:key accessGroup:@"MYAPPPREFIX.MYSHAREDACCESSNAME"]; 
[keychainItemWrapper setObject:value forKey:(__bridge id)(kSecAttrAccount)]; // store the new value in the keychain 

如果accessGroup被指定爲,它的效果很好。但是,如果我指定的訪問組,我得到了以下錯誤崩潰在調試日誌:

斷言失敗 - [KeychainItemWrapper writeToKeychain] .../KeychainItemWrapper.m:329 終止,由於應用程序未捕獲異常'NSInternalInconsistencyException',原因:'無法添加鑰匙串項目'。

由此產生的OSStatus錯誤代碼是-25243,我無法追蹤更多信息。

爲了寫入共享訪問組,我還需要做些什麼嗎?

回答

5

如果有助於他人,我可以找出問題。在Xcode'Capabilities'中,我需要省略應用程序ID前綴。但是,標識訪問組時需要包含應用標識前綴。

所以,在功能上,我將一個組命名爲'myAccessGroup'。

在我的代碼,我包括前綴作爲這樣:

keychainItemWrapper = [[KeychainItemWrapper alloc] initWithIdentifier:key accessGroup:@"xxxxxxxx.myAccessGroup"]; 
+0

應用程序ID的前綴意味着軟件包標識符? – Durgaprasad 2015-06-05 05:59:24

+0

否。應用程序ID前綴是用於對應用程序集合進行分組的唯一標識符。您可以在Apple會員中心 - 標識符 - APP ID中找到這些信息。 – RGML 2015-08-13 10:26:05