在Mac OS X >= 10.6中,Finder文件图标标记(图标叠加)是什么?

5
我正在寻找一种解决方案,使用cocoa在Mac上实现文件图标叠加(像Dropbox在mac上所做的那样)。有人知道如何做到这一点吗?我已经查阅了Xcode文档,并查看了scpplugins的源代码,但它是比较老的carbon代码。

你可以在这个链接中找到你需要的内容:http://stackoverflow.com/questions/3181145/add-an-icon-mac-pc-to-a-file-with-cocoa - Jason Coco
这个回答解决了你的问题吗?如何在Finder中添加图标覆盖? - pkamb
5个回答

5

可能有些晚了,但也许会对某些人有所帮助。

我使用类NSWorkspace(请参见setIcon:forFile:options)解决了同样的问题。

基本思路:

  1. 尝试使用QLThumbnailImageCreate获取文件预览(如果不为NULL,则会得到缩略图图标)

  2. 如果没有得到缩略图,则获取文件的默认OS X图标(NSWorkspace iconForFile

  3. 组合缩略图(或默认图标)和您的徽章

  4. 将新图标设置为文件(NSWorkspace setIcon:forFile:options


谢谢解决方案,我会尝试一下。但是如果用户移动文件,图标会保留在原地吗? - Jonas Schnelli
抱歉回复晚了。是的,图标会一直在那里。 - miham

4
自从Snow Leopard重构Finder后,旧的Carbon方法将不再起作用。我采取的方法是编写自定义bundle,并将其注入到Finder中以便图标被"badge"。

请查看Wolf Rentzsch的mach_inject (https://github.com/rentzsch/mach_star/tree/master/mach_inject) ,以便将自定义bundle注入到Cocoa应用程序中。

使用class-dump可以查看Cocoa应用程序(例如Snow Leopard和Lion中的Finder)的头文件,了解您需要在自己的bundle中覆盖的内容。


1

0

NSDockTile 让这变得非常简单:

NSDockTile *dockTile = [NSApp dockTile];
[dockTile setBadgeLabel:@"33"];

我在询问查找器文件图标。当然,码头图标很容易处理。我没有表达得够准确,但我已经编辑了我的问题。无论如何,还是谢谢。 - Jonas Schnelli
谢谢澄清。请投票-1的人说明原因,谢谢。 - sbooth

0

您可以使用以下两种方法在文件/文件夹上添加图标覆盖。

  1. 如果您想要更改Mac OS X中文件或文件夹的图标,可以在NSWorkspace上使用-setIcon:forFile:options:方法。
    但是,使用此方法应用图标覆盖后,即使将该文件/文件夹移动到外部,覆盖仍然存在。这可能不是确切的解决方案。

  2. 相反,在您的应用程序中使用Finder Sync Extension目标(文件 - 新建 - 目标 - Finder Sync Extension)。
    创建扩展名后,您的应用程序无法直接与此目标通信。为了激活,请使用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”)。

为此,在目标-功能-应用程序组下启用“应用程序组”,并提供与上述相同的标识符(即“teamid.com.company.test”),其中teamid是您从苹果开发者门户网站获取的ID。同样,对于您的扩展目标,执行相同的步骤。

在结束之前,请确保扩展是否已激活。要检查,请转到系统首选项-扩展名-应用查找器。 这是用户可以启用/禁用应用程序的图标覆盖的全局点。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接