2014-09-24 48 views
3

我爲存儲鑰匙串值所做的任何嘗試都失敗,並顯示錯誤代碼errSecInteractionNotAllowed(-25308)。我一直在玩觸摸ID和鑰匙鏈,所以我可能已經改變了我不知道的權限,但我無法弄清楚任何可能導致此問題的改變。SecItemAdd()返回errSecInteractionNotAllowed(-25308)

在我使用鑰匙串之前,我能夠成功地將一個值存儲到鑰匙串中,所以它很可能是設備中的某個設置。如果它是一個設置,我希望有一些幫助發現我需要改變以再次將數據保存在鑰匙串中。此外,我想要一些建議,以確保在嘗試之前可以保存到鑰匙串。

static NSString *serviceName = @"myServiceName"; 

- (void) createTouchIdKeyChain:(NSString *)identifier password:(NSString*)password{ 
CFErrorRef error = nil; 
SecAccessControlRef sacObject = 
SecAccessControlCreateWithFlags(kCFAllocatorDefault, 
           kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly, 
           kSecAccessControlUserPresence, &error); 

NSData* secret = [password dataUsingEncoding:NSUTF8StringEncoding]; 

NSDictionary* attributes = @{ 
          (__bridge id)kSecClass: (__bridge id)kSecClassGenericPassword, 
          (__bridge id)kSecAttrService: serviceName, 
          (__bridge id)kSecAttrAccount: identifier, 
          (__bridge id)kSecValueData: secret, 
          (__bridge id)kSecAttrAccessControl: (__bridge id)sacObject, 
          (__bridge id)kSecUseOperationPrompt: @"create password test" 
          }; 
OSStatus status = SecItemAdd((__bridge CFDictionaryRef) attributes, nil); 
ODLog(@"done"); 
} 

回答

1

在我的情況下,如果你嘗試存儲兩個項目具有相同標識符的鑰匙圈,第二次嘗試將錯誤代碼-25308失敗。嘗試刪除第一個,然後重試。

相關問題