我是Mac开发和钥匙串概念的新手。我希望对这些主题有一些清晰的认识,但我确实有一个具体的问题。
我有一个私人发布的应用,而不是通过应用商店。我的签名证书之前已更改,因此现在我们有一个旧应用程序和一个新应用程序。它们具有相同的包ID和文件系统路径,但新应用程序在尝试访问旧应用程序创建的钥匙串条目时提示。我需要远程运行这个提示是不可接受的。
经过一些研究后我意识到,如果没有提示,就无法编辑旧钥匙串条目的ACL,所以当且仅当新应用程序无法访问时,我才会决定删除这些钥匙串条目。他们。这必须由安装程序确定,安装程序是与旧应用程序或新应用程序无关的第三个应用程序。
如何检查给定应用程序是否在钥匙串条目的访问控制列表中?
以下是我尝试过的方法:我在SecACLCopyContents
上使用了SecKeychainItemRef
来获取SecTrustedApplicationRef
的数组。
然后我使用SecTrustedApplicationCreateFromPath
获取新应用的SecTrustedApplicationRef
。
然后我遍历SecTrustedApplicationRef
数组并比较SecTrustedApplicationCopyData
的结果,以检查是否有任何应用与我从路径创建的应用匹配。
但是,只要具有相同的文件系统路径,即使它们具有完全不同的内容,我也会获得任意两个应用的匹配。我可能误解了SecTrustedApplicationRef
和SecTrustedApplicationCopyData
的目的。
TL; DR
检查某个应用程序是否可以访问很久以前制作的钥匙串条目的正确方法是什么?鉴于我们不能假设bundle id和filesystem path是app的内容的唯一标识符。
奖金问题:安全性实际上比较了什么,以确定应用是否有权访问钥匙串条目?