我在Mac 10.6系统上有一个使用Xcode 3.2.5构建的程序,该程序需要添加到系统钥匙串中并从中删除项目。它在Mac OS X 10.6上运行良好,但在10.7上,对SecKeychainItemDelete的调用返回了错误代码-67701,该代码未在10.6 SDK中定义。经过一些谷歌搜索后,我发现在10.7 SDK中新增了-67701(errSecInvalidRecord)。有谁知道如何解决这个问题?
答案 0 :(得分:4)
我遇到了同样的问题。发生这种情况是因为每次调用SecKeychainFindInternetPassword和SecKeychainFindGenericPassword方法之一时,keychain api都会缓存SecKeychainItemRef对象。因此,每当您调用这两种方法中的任何一种时,请务必使用方法SecKeychainItemFreeAttributesAndData清除api缓存。还使用CFRelease释放SecKeychainItemRef对象。
答案 1 :(得分:2)
回答一个超级老问题:我认为这是因为OS X Lion中新的沙盒功能。我认为解决方案是签署您的应用并为Keychain添加启用。
来源:TunnelBlick - an OSS VPN tunnel - suggests this is the problem