可能有些晚了,但也许会对某些人有所帮助。
我使用类NSWorkspace(请参见setIcon:forFile:options
)解决了同样的问题。
基本思路:
尝试使用QLThumbnailImageCreate获取文件预览(如果不为NULL,则会得到缩略图图标)
如果没有得到缩略图,则获取文件的默认OS X图标(NSWorkspace iconForFile)
组合缩略图(或默认图标)和您的徽章
将新图标设置为文件(NSWorkspace setIcon:forFile:options)
NSDockTile
让这变得非常简单:
NSDockTile *dockTile = [NSApp dockTile];
[dockTile setBadgeLabel:@"33"];
您可以使用以下两种方法在文件/文件夹上添加图标覆盖。
如果您想要更改Mac OS X中文件或文件夹的图标,可以在NSWorkspace
上使用-setIcon:forFile:options:方法。
但是,使用此方法应用图标覆盖后,即使将该文件/文件夹移动到外部,覆盖仍然存在。这可能不是确切的解决方案。
相反,在您的应用程序中使用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。同样,对于您的扩展目标,执行相同的步骤。
在结束之前,请确保扩展是否已激活。要检查,请转到系统首选项-扩展名-应用查找器。 这是用户可以启用/禁用应用程序的图标覆盖的全局点。