我为将值存储到钥匙串(keychain)所做的任何尝试都失败了,错误代码为 errSecInteractionNotAllowed (-25308)。我一直在玩 Touch ID 和钥匙串(keychain),所以我可能更改了我不知道的权限,但我无法弄清楚我可以更改的任何内容可能会导致此问题。
在我摆弄钥匙串(keychain)之前,我能够成功地将一个值存储到钥匙串(keychain)中,因此它可能是设备中某处的设置。如果它是一个设置,我需要一些帮助来发现我需要更改的内容以再次将数据保存在钥匙串(keychain)中。此外,我还想要一些建议,以确保在尝试之前我可以访问保存到钥匙串(keychain)的权限。
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");
}
最佳答案
在我的例子中,如果您尝试将具有相同标识符的两个项目存储到钥匙串(keychain),第二次尝试将失败,错误代码为 -25308。尝试删除第一个并重试。
关于ios - SecItemAdd() 返回 errSecInteractionNotAllowed (-25308),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26018810/