3

我将值存储到钥匙串的任何尝试都失败,错误代码为 errSecInteractionNotAllowed (-25308)。我一直在玩弄 Touch ID 和钥匙串,所以我可能更改了我不知道的权限,但我无法弄清楚我可以更改的任何可能导致此问题的内容。

在摆弄钥匙串之前,我能够成功地将值存储到钥匙串中,因此它可能是设备中某处的设置。如果它是一个设置,我需要一些帮助来发现我需要更改哪些内容才能再次将数据保存在钥匙串中。此外,我想要一些建议,以确保我在尝试之前可以保存到钥匙串。

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");
}
4

1 回答 1

1

在我的情况下,如果您尝试将具有相同标识符的两个项目存储到钥匙串中,第二次尝试将失败,错误代码为 -25308。尝试删除第一个并重试。

于 2015-04-09T19:11:50.197 回答