Cocoa 这个图标是从哪里来的?

Cocoa 这个图标是从哪里来的?,cocoa,macos,Cocoa,Macos,是否有一个unix工具,我可以将文件传递给它,并让它告诉我文件的图标来自何处 我要找的是这样的东西: $WhoProvidedIcon/Path/To/file.myex UTI:com.myapplication.document PLIST:/path/to/myapplication.app/Contents/Info.PLIST 图标:/path/to/myapplication.app/Contents/Resources/BaseDoc.icnsMac OSX上大多数应用程序的图标都

是否有一个unix工具,我可以将文件传递给它,并让它告诉我文件的图标来自何处

我要找的是这样的东西:

$WhoProvidedIcon/Path/To/file.myex

UTI:com.myapplication.document

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


图标:/path/to/myapplication.app/Contents/Resources/BaseDoc.icns

Mac OSX上大多数应用程序的图标都存储在应用程序包中。如果您右键单击.app,然后选择
显示软件包内容
,然后转到
内容->资源
,您应该会看到其中的图标。

我不知道有任何特定的工具提供此信息。但是,听起来您有重叠的扩展。如果Finder.app显示文件的图标,那么您应该能够在信息窗口中查找该文件,并查看默认情况下列出的打开该文件的应用程序。然后查看该应用程序的.plist文件,查看它是否正在使用您的扩展名。如果提供图标的应用程序已被删除,或未被列为默认应用程序,则信息窗口还应说明该文档的类型。操作系统将从至少三个不同的位置提供图标

在一种情况下,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 ); NSString*uti=[ws-typeofficefile:@”/Users/egorr/Desktop/file.vwx“错误:&error]; NSLog(@“UTI:%@”,UTI); NSLog(@“UTI本地化描述:%@,[ws-localizedDescriptionForType:UTI]); NSLog(@“UTI错误描述:%@,[错误本地化描述]); NSURL*uti声明URL=(NSURL*)UTTypeCopyDeclaringBundleURL((CFStringRef)uti); NSLog(@“UTI声明URL:%@”,UTI声明URL); NSDictionary*utiDeclaration=(NSDictionary*)UTTypeCopyDeclaration((CFStringRef)uti); NSLog(@“UTI声明:%@”,UTI声明); 这不会得到图标的路径,但它会得到一个应用程序,该应用程序是UTI声明的来源

Quick Look插件还可能提供一个图标,QLManager的输出可用于确定是否存在这种情况


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

谢谢,但我还不够清楚。我已经编辑了我的问题。我需要它的原因纯粹是为了调试。正在将图标分配给不应分配的文件,了解图标的确切来源可能会有所帮助。我可以使用以下代码获得部分答案:NSString*uti=[ws-typeofficefile:@”/Users/egorr/Desktop/file.vwx“error:&error];NSLog(@“UTI:%@”,UTI);我仍然不确定的是如何获取文件图标的路径。你到底想做什么?您是否有一个图标冲突的文件,或者加载了不同扩展名的文件?文档由Finder.app根据从系统上安装的应用程序收集的信息和图标分配图标。如果您的目标是更改所有VectorWorks文件,那么您应该编写代码来收集所有.vwx文件,然后在所有文件上使用
setIcon:forFile:options:
,编写代码来更改其他应用程序的内容有点可疑。我想要一个工具来告诉我文件图标来自何处。我有一个文件,它显示了一个可以在什么时候显示另一个,我相信如果我有一个工具,可以告诉我图标是从哪里来的,它会很有用。这一切都应该由应用程序的info.plist定义,据我所知,这一切都是正确的……但是,出现了错误的图标。目前这似乎只影响一台特定的机器,我无法在我的机器上复制它。它实际上可能是您的launch services数据库,请查看重建它的说明。这并不是那么简单。同一应用程序有多个版本,所有版本都要求相同的扩展。有可能其中一个已经被破坏了,但我不认为发现者会告诉我是哪一个,如果确实是这样的话。因此,可能需要一个工具来告诉我查找程序实际从何处获得了文件的图标。