如何指定要在Keychain授权对话框中使用的图标

时间:2011-03-26 04:26:17

标签: cocoa macos

我正在使用SecKeychainFindGenericPassword()来获取我之前使用SecKeychainAddGenericPassword()保存的应用程序密码。正如所料,MacOS为用户提供了一个对话框,要求他们批准钥匙串访问。但是,叠加在挂锁右下方的图标是通用文档图标,而不是我的应用程序图标。

我无法在Keychain Services References中看到有关指定图标的任何内容,因此我假设操作系统只使用您的应用程序图标。我的.icns文件(在info.plist中引用)根据Iconographer填充了所有可能的大小和位图,所以我真的不确定下一步该在哪里。

希望有人可以指出我有明显的问题吗?

3 个答案:

答案 0 :(得分:1)

这通常是因为您的应用程序是从其他用户无法读取的目录运行的。验证对话框显然在另一个进程中运行,它需要能够从捆绑包中获取您的图标。

答案 1 :(得分:1)

这是Chris Suter先前提到的访问权限问题。 plist中图标的名称与应用程序包中指向的文件无关。将在提升过程中使用Info.plist(CFBundleIconFile)(如果未指定自定义的电梯) 在Lion或更新的操作系统上试用它,您会发现您在家中复制的任何应用程序都受到保护(完全无法访问),因此电梯无法读取图标。

答案 2 :(得分:0)

kSecCustomIconItemAttr弃用之前,Keychain Services Reference (2003)有这样的说法:

  

kSecCustomIconItemAttr

     

标识自定义图标属性。   您可以使用此标记来设置或获取值   类型Boolean,表示是否   该项目具有特定于应用程序   图标。为此,您还必须设置   由...标识的属性值   将kSecTypeItemAttr标记为文件类型   哪个有对应的   桌面数据库中的图标,并设置   由...标识的属性值   将kSecCreatorItemAttr标记为   适当的应用程序创建者类型。   如果是自定义图标对应的   可以找到项目的类型和创建者   在桌面数据库中,它将是   由Keychain Access显示。   否则,使用默认图标。

也许尝试设置kSecCreatorItemAttrkSecTypeItemAttr属性。