我搜索一个解决方案,用mac上的cocoa执行文件图标叠加(图标标记)(就像Dropbox在mac上做的那样)。 有谁知道这样做的方法? 我搜索了Xcode文档,我查看了scpplugins源代码,这是一种旧的碳代码。
感谢您的帮助
答案 0 :(得分:5)
有点迟到,但也许会帮助别人。
我用类NSWorkspace解决了同样的问题(参见 setIcon:forFile:options )
基本理念:
1。)尝试使用QLThumbnailImageCreate预览文件(如果不是NULL,您将获得缩略图图标)
2.。)如果你没有获得缩略图,那么获取文件的默认OS X图标(NSWorkspace iconForFile )
带有徽章的3。)Combine缩略图(或默认图标)
4.。)为文件设置新图标(NSWorkspace setIcon:forFile:options )
答案 1 :(得分:4)
由于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),以了解在自己的bundle中需要覆盖的内容。< / p>
答案 2 :(得分:1)
我知道这是一个老问题。
最近有一个实现此功能的库:https://github.com/liferay/liferay-nativity。
答案 3 :(得分:0)
NSDockTile
使这很简单:
NSDockTile *dockTile = [NSApp dockTile];
[dockTile setBadgeLabel:@"33"];
答案 4 :(得分:0)
您可以使用以下两种方法在文件夹/文件上叠加图标。
如果要在Mac OS X中更改文件或文件夹的图标,可以在NSWorkspace上使用-setIcon:forFile:options:方法。 但是,使用此方法应用图标叠加后,即使您将文件/文件夹移到外面,叠加也会退出。这可能不是确切的解决方案。
而是在您的应用内使用Finder Sync Extension目标(文件 - 新建 - 目标 - Finder同步扩展)。 创建扩展程序后,您的应用程序无法与此目标直接通信。要激活,请使用AppleScript命令(我不认为有更好的选择。)
激活
NSString * pluginPath = [[[NSBundle mainBundle] builtInPlugInsPath] stringByAppendingPathComponent:@&#34; yourextension.appex&#34;];
NSString * pluginkitString = [NSString stringWithFormat:@&#34; pluginkit -e使用-a \&#34;%@ \&#34;&#34;,pluginPath]; system([pluginkitString cStringUsingEncoding:NSUTF8StringEncoding]);
一旦目标被激活,我们的应用程序可以通过几种方式与该扩展进行通信。其中很少是:
使用NSDistributedNotificationCenter。此类提供了一种向其他任务中的对象发送通知的方法(如此处的扩展名)。
其他方式是使用[[NSUserDefaults alloc] initWithSuiteName:@&#34; teamid.com.company.test&#34;];
您的应用程序和目标都应具有公共组标识符(即&#34; teamid.com.company.test&#34;)。 对于此启用&#34;应用程序组&#34;在目标 - 功能 - 应用程序组下,并给出如上所述的标识符(即&#34; teamid.com.company.test&#34;),teamid是您从苹果开发者门户网站获取的ID。对扩展目标执行相同的步骤。
在结束之前,请确保已激活扩展程序。要检查是否转到系统首选项 - 扩展程序 - 您的应用程序查找器。 这是全球的一点,用户可以为您的应用程序启用/禁用图标覆盖。