图标来自哪里?

时间:2010-07-16 21:26:08

标签: cocoa macos

是否有一个unix工具,我可以传递一个文件并让它告诉我文件的图标来自哪里?

我正在寻找的是这样的:

$ WhoProvidedIcon /Path/To/file.myex

UTI:com.myapplication.document

PLIST:/path/to/myapplication.app/Contents/Info.plist

ICON:/path/to/myapplication.app/Contents/Resources/BaseDoc.icns

3 个答案:

答案 0 :(得分:2)

Mac OSX上大多数应用程序的图标都存储在应用程序包本身中。如果您右键单击.app然后选择Show Package Contents,请转到Contents -> Resources,您应该看到其中的图标。

答案 1 :(得分:1)

操作系统将至少提供三个不同的位置来提供图标。

在某种情况下,NSWorkspace可用于帮助识别位置:

NSString* uti = [ws typeOfFile:@"/Users/egorr/Desktop/file.vwx" error:&error];
NSLog( @"UTI: %@", uti );
NSLog( @"UTI localized description: %@", [ws localizedDescriptionForType:uti] );
NSLog( @"UTI error description: %@",[error localizedDescription] );
NSURL* utiDeclarationURL = (NSURL*)UTTypeCopyDeclaringBundleURL( (CFStringRef)uti );
NSLog( @"UTI declaration URL: %@", utiDeclarationURL );
NSDictionary* utiDeclaration = (NSDictionary*)UTTypeCopyDeclaration( (CFStringRef)uti );
NSLog( @"UTI declaration: %@", utiDeclaration );

这将不会完全获得图标的路径,但它将获得一个应用程序,其中声明来自UTI。

也可以从Quick Look插件提供图标,qlmanage的输出可用于确定是否是这种情况。

用户可以在Finder的“获取信息”窗口中为给定“类型”的所有文件设置他们喜欢的应用程序。例如,可以将文本文件类型设置为始终在TextMate中打开。 TextMate应用程序为其可以保存的所有文件类型提供自定义文件图标。在Finder的获取信息窗口中进行此更改后,该类型的所有文件将具有由TextMate提供并在UTI注册的图标。要确定是否是这种情况,需要查看启动服务数据库 - lsregister -dump

答案 2 :(得分:0)

我不知道提供此信息的任何特定工具。但是,听起来你有重叠的扩展。如果Finder.app显示文件的图标,那么您应该只能在信息窗口中查找该文件,并查看列出的应用程序默认情况下打开文档。然后查看该应用程序的.plist文件以查看它是否正在使用您的扩展。如果提供图标的应用程序已被删除或未列为默认应用程序,则信息窗口还应说明哪种文档可能有用。