swift - macOS 钥匙串共享绕过密码对话框
问题描述
我正在尝试构建一个在 macOS 上使用钥匙串共享的应用程序。但是当尝试访问钥匙串数据时,它会显示以下对话框。
这造成了非常糟糕的用户体验,用户被迫输入他们的计算机密码才能使用该应用程序。
我在 iOS 上没有遇到过这个问题。
我怎样才能绕过这个对话框?所有的应用程序都是在同一个开发团队下签署的,所以我认为这应该不是问题。
解决方案
来自同一开发者的应用程序不会自动共享对钥匙串项目的访问权限;您必须明确设置某种共享策略。具体操作方式取决于项目是存储在 iCloud 钥匙串还是旧式钥匙串中。
对于 iCloud 钥匙串中的项目,您需要定义一个访问组,将您的应用程序添加到该组,并将kSecAttrAccessGroup
您的钥匙串项目的属性设置到该组。有关详细信息,请参阅 Apple 开发文档“在一组应用程序中共享对钥匙串项的访问”。
对于非 iCloud(旧式)钥匙串中的项目,您需要为每个项目定义一个访问控制列表,其中列出了应授予访问权限的每个应用程序,以及访问权限的类型。有关详细信息,请参阅 Apple 开发文档“访问控制列表”。
注意:我认为问题中的对话框表示非 iCloud 钥匙串项目。如果您输入密码并单击“始终允许”,它将添加一个访问控制条目,授予该应用访问该项目的权限。您可以在 Keychain Access 实用程序中查看访问控制列表。
推荐阅读
- python-3.x - 从数据框中删除标点符号和停用词
- javascript - 使用 Python 解释 Javascript Web 应用程序
- r - 我可以将插入符号 RFE 结果用于带有 CV 的后续随机森林吗?
- flutter - OnPressed() 返回在 null 上调用了方法“call”。接收方:null 尝试调用:call() 作为错误
- xpath - Xidel:如何从许多相同的值/类中仅选择 1 个并从结果中删除不需要的元素?
- sql - 我正在尝试使用来自 SQL 的查询填充我的 ComboBox
- c++ - 对 operator= 使用通用引用而不是多个重载
- html - 为什么 html select 用溢出滚动覆盖容器?
- javascript - 如何在 Node 中承诺和等待 setImmediate?
- javascript - 如何从反应中的儿童道具访问儿童的属性