我们正在开发一个Mac App(非沙盒)需要访问钥匙串中的ssl客户端证书 . 当应用程序首次启动时,会提示确认访问钥匙串项目 . 带选项:始终允许,允许,拒绝 . 这很好 .

enter image description here

当用户选择始终允许时,下次用户启动应用程序时,应用程序将有权使用该证书 . 但是,当我们的应用程序更新 . (我们的应用程序更新使用sparkle,它只是简单地替换磁盘上的.app文件,然后重新启动应用程序),更新的应用程序 SOMEHOW CAN NOT ACCESS THIS CERTIFICATE, and get error -25293(errSecAuthFailed) ,控制台输出 Dec 10 19:21:55 userMacBook-Pro.local com.apple.SecurityServer[15]: suppressing keychain prompt for invalidly signed client /Applications/My-APP.app(42277) Dec 10 19:21:55 userMacBook-Pro.local My-APP[42277]: CFNetwork SSLHandshake failed (-25293) Error Domain=kCFStreamErrorDomainSSL Code=-25293 然后我检查钥匙串中的私钥,应用程序的名称仍在访问控制面板中 . 最后,我重新启动系统,更新的应用程序可以再次访问此证书(没有任何促销提示确认访问钥匙串项目)一切正常 . 那么,如何在不更新系统的情况下让应用程序在更新后保持对证书的正确访问权限?但是这个错误并不总是显示出来,如果系统只是启动(不运行几个小时),应用程序可以更新服务时间并保留证书权限 .

用户单击后,应用程序始终处于访问控制状态"Always Allow"
enter image description here

PS,如果我手动转到访问控制列表并选择“允许所有应用程序访问此项目,那么该应用程序将具有正确的访问权限 . 但我们不能让我们的用户执行此操作”

经过一些谷歌搜索,我在续集专业版上发现了类似的问题

Won't save passwords on 10.8 12A269

那么,我怎样才能让我的应用更新,并保持正确的访问权限? I found this issue on serval 10.9.x , 10.10.x systems.