Mac OS X >= 10.6 上的 Finder 文件图标标记(图标覆盖)
Posted
技术标签:
【中文标题】Mac OS X >= 10.6 上的 Finder 文件图标标记(图标覆盖)【英文标题】:Finder file icon badging (icon overlay) on Mac OS X >= 10.6 【发布时间】:2011-12-08 08:39:09 【问题描述】:我正在寻找一种解决方案,在 Mac 上用可可做文件图标覆盖(图标标记)(就像 Dropbox 在 Mac 上做的那样)。
有人知道怎么做吗?
我搜索了 Xcode 文档并查看了 scpplugins 源代码,这是一种旧的碳代码。
【问题讨论】:
您可以在此链接中找到您要查找的内容:***.com/questions/3181145/… 这能回答你的问题吗? How can i add icon overlay in finder? 【参考方案1】:有点晚了,但也许会对某人有所帮助。
我用NSWorkspace 解决了同样的问题(见setIcon:forFile:options
)
基本思路:
尝试使用QLThumbnailImageCreate 预览文件(如果不为NULL,您将获得缩略图)
如果您没有获得缩略图,则获取文件的默认 OS X 图标 (NSWorkspace iconForFile)
Combine 带有您的徽章的缩略图(或默认图标)
为文件设置新图标(NSWorkspace setIcon:forFile:options)
【讨论】:
感谢您的解决方案。我会试一试。但是如果用户移动文件怎么办。图标会留在那里吗? 抱歉回答晚了。是的图标停留在那里。【参考方案2】:由于 Finder 在 Snow Leopard 中进行了重新设计,旧的 Carbon 方法将不再有效。为了能够在 Finder 中标记图标,我采取的方法是编写一个自定义包,然后需要将其注入 Finder。
查看 Wolf Rentzsch 的 mach_inject (https://github.com/rentzsch/mach_star/tree/master/mach_inject) 以便能够将自定义包注入 Cocoa 应用程序。
使用 class-dump 可以查看 Cocoa 应用程序的头文件(例如 Snow Leopard 和 Lion 中的 Finder),以了解您需要在自己的包中覆盖哪些内容。
【讨论】:
【参考方案3】:我知道这是一个老问题。
最近有一个库实现了这个功能:https://github.com/liferay/liferay-nativity。
【讨论】:
【参考方案4】:NSDockTile
让这变得非常简单:
NSDockTile *dockTile = [NSApp dockTile];
[dockTile setBadgeLabel:@"33"];
【讨论】:
我在询问查找器文件图标。当然,停靠图标的东西真的很容易。我不够精确,但我确实编辑了我的问题。还是谢谢。 感谢您的澄清。投-1票的人可以评论一下为什么吗?【参考方案5】:您可以使用以下两种方法在文件夹/文件上覆盖图标。
如果您想在 Mac OS X 中更改文件或文件夹的图标,您可以在 NSWorkspace
上使用 -setIcon:forFile:options: 方法。
但是,在您使用此方法应用图标叠加后,即使您将该文件/文件夹移到外部,叠加也会退出。这可能不是确切的解决方案。
改为在您的应用程序中使用 Finder 同步扩展目标(文件 - 新建 - 目标 - Finder 同步扩展)。 创建扩展后,您的应用程序将无法与此目标直接通信。为了激活,请使用 AppleScript 命令(我认为没有更好的选择。)
激活
NSString *pluginPath = [[[NSBundle mainBundle] builtInPlugInsPath] stringByAppendingPathComponent:@"yourextension.appex"];
NSString *pluginkitString = [NSString stringWithFormat:@"pluginkit -e use -a \"%@\"", pluginPath];
system([pluginkitString cStringUsingEncoding:NSUTF8StringEncoding]);
目标激活后,我们的应用程序可以通过多种方式与该扩展程序进行通信。其中很少有:
使用NSDistributedNotificationCenter
。此类提供了一种向其他任务中的对象发送通知的方法(如此处的扩展)。
其他方式是使用:
[[NSUserDefaults alloc] initWithSuiteName:@"teamid.com.company.test"];
您的应用程序和目标都应该有共同的组标识符(即“teamid.com.company.test”)。
为此,在 Target - Capabilities - App Groups 下启用“App Groups”,并提供类似上述的标识符(即“teamid.com.company.test”),teamid 是您将从苹果开发人员那里获得的 id门户网站。对您的扩展目标也执行相同的步骤。
在结束之前,请确保扩展程序是否已激活。要检查,请转到系统偏好设置 - 扩展 - 您的应用程序查找器。 这是用户可以为您的应用程序启用/禁用图标覆盖的全局点。
【讨论】:
以上是关于Mac OS X >= 10.6 上的 Finder 文件图标标记(图标覆盖)的主要内容,如果未能解决你的问题,请参考以下文章
在Mac OS X 10.6上的Python中,无法在Matplotlib中将字体更改为Helvetica