给定应用程序的完整路径或 NSBundle 实例,您如何获取其图标?

Given the full path or an NSBundle instance of an application, how do you get its icon?

如果我有应用程序包的完整路径或该应用程序的 NSBundle 实例,我如何获得该应用程序图标的 NSImage 表示?

具体来说,我想获得适用于一组特定维度的最佳可用图标版本。例如,如果应用程序图标的可用版本包括尺寸 32x32、64x64 和 128x128 点,如果我请求一个 96x96 点的版本,我将获得 128x128 版本。

这将需要在 Retina 和非 Retina 显示器上工作,因此生成的 NSImage 将必须包括图标的 Retina 和非 Retina 表示。

我找到了 NSWorkspaceiconForFile: 方法,但不幸的是它只返回一个 32x32 像素的图标,所以这对我的目的没有用。

我还可以从其信息字典中读取包的 CFBundleIconFileCFBundleIconName 键,然后从其 icns 文件或资产目录中提取正确的图像,但这似乎很多工作。我不确定从哪里开始从这两种文件类型中获取图像。我希望有更简单的方法!

我错了 iconForFile:。虽然 NSImage it returns 确实报告其大小为 32x32,但它包含该应用程序的所有各种图标大小的图像表示,包括更大的图标。选择我想要的,或者使用bestRepresentationForRect:context:hints:方法,都是一件简单的事情。