是否有一个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
答案 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文件以查看它是否正在使用您的扩展。如果提供图标的应用程序已被删除或未列为默认应用程序,则信息窗口还应说明哪种文档可能有用。