Ios SecItem方法失败,返回-34018

Ios SecItem方法失败,返回-34018,ios,objective-c,keychain,Ios,Objective C,Keychain,我使用下面的代码在iOS上安全地存储字符串。有时SecItemCopyMatching(),然后也SecItemAdd()失败并返回错误代码-34018。我找不到这个代码;这是什么意思 NSMutableDictionary* query = [NSMutableDictionary dictionary]; [query setObject:(__bridge id)kSecClassGenericPassword forKey:(__bridge id)kSecClass]; [query

我使用下面的代码在iOS上安全地存储字符串。有时
SecItemCopyMatching()
,然后也
SecItemAdd()
失败并返回错误代码
-34018
。我找不到这个代码;这是什么意思

NSMutableDictionary* query = [NSMutableDictionary dictionary];

[query setObject:(__bridge id)kSecClassGenericPassword forKey:(__bridge id)kSecClass];
[query setObject:account forKey:(__bridge id)kSecAttrAccount];
[query setObject:(__bridge id)kSecAttrAccessibleAlways forKey:(__bridge id)kSecAttrAccessible];

OSStatus error = SecItemCopyMatching((__bridge CFDictionaryRef)query, NULL);
if (error == errSecSuccess)
{
    // Do update.
    NSDictionary* attributesToUpdate;
    attributesToUpdate = [NSDictionary dictionaryWithObject:[inputString dataUsingEncoding:NSUTF8StringEncoding]
                                                     forKey:(__bridge id)kSecValueData];

    error = SecItemUpdate((__bridge CFDictionaryRef)query, (__bridge CFDictionaryRef)attributesToUpdate);
    if (error != errSecSuccess)
    {
        NBLog(@"SecItemUpdate failed: %d", (int)error);
        result = NO;
    }
}
else if (error == errSecItemNotFound)
{
    // Do add.
    [query setObject:[inputString dataUsingEncoding:NSUTF8StringEncoding] forKey:(__bridge id)kSecValueData];

    error = SecItemAdd((__bridge CFDictionaryRef)query, NULL);
    if (error != errSecSuccess)
    {
        NBLog(@"SecItemAdd failed: %d", (int)error);
        result = NO;
    }
}

-34018
是根据

当所需权限不存在时出现内部错误。

对于iOS 10+版,您需要一个
.authorities
文件来访问钥匙链。大概是这样的:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>com.apple.keystore.access-keychain-keys</key>
    <true/>
    <key>com.apple.keystore.device</key>
    <true/>
</dict>
</plist>

com.apple.keystore.access-keychain-keys
com.apple.keystore.device

您是否看到设备或模拟器出现故障?@zaph在设备上。你知道这个特殊的(可能是苹果内部的)错误代码是什么意思吗?