2014-09-24 41 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失败。尝试删除第一个,然后重试。

相关问题