2010-10-30 33 views
4

给定应用程序路径(或应用程序的NSBundle等),是否有方法可以轻松/有效地确定应用程序可以打开哪些内容类型?应用程序能够理解的内容类型

我最初的尝试是读取应用程序的Info.plist文件并提取kUTExportedTypeDeclarationsKey密钥下列出的内容类型。但是,这种方法存在一些缺陷,我一直无法解决。

  1. 并非所有的应用程序都使用此密钥。例如,BBEdit不会,而是列出一大堆可识别的文件扩展名。
  2. UTI区分大小写。例如,Pages将com.apple.iWork.Pages.pages列为导出的内容类型,但Pages文档实际上没有在其内容类型树中列出该类型。文档使用com.apple.iwork.pages.pages,由iWork quicklook生成器(位于/Library/QuickLook/iWork.qlgenerator)定义。

在知道一些的LaunchServices功能(LSCopyApplicationURLsForURL()LSCopyApplicationForMIMEType(),等等),我获得了可以打开一个文件(或文件类型)的应用程序,但我喜欢做的倒数。 (也许我不得不诉诸解析lsregister -dump的输出?)

也许一个简单的方法来说明问题将是:给定一个应用程序,有什么最简单的方法来找到它可以打开的所有文件?

有什么建议吗?

回答

0

看来使用LSItemContentTypes键是10.4后的首选方法。

Apple: Document-Based Applications

+0

为了更清楚起见,LSItemContentTypes不是顶级密钥,它在CFBundleDocumentTypes数组中使用。 – JWWalker 2011-03-19 05:33:46

相关问题