应用程序理解的内容类型

时间:2010-10-30 23:19:01

标签: objective-c cocoa content-type

给定应用程序路径(或NSBundle到应用程序等),有没有办法轻松/有效地确定应用程序可以打开哪些内容类型?

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

  1. 并非所有应用程序都使用此密钥。例如,BBEdit没有,而是列出了一大堆公认的文件扩展名。
  2. UTI区分大小写。例如,页面将com.apple.iWork.Pages.pages列为导出的内容类型,但实际上没有Pages文档在其内容类型树中列出该类型。文档使用com.apple.iwork.pages.pages,它由iWork quicklook生成器(/Library/QuickLook/iWork.qlgenerator)定义。
  3. 知道使用一些LaunchServices函数(LSCopyApplicationURLsForURL()LSCopyApplicationForMIMEType()等),我可以获得可以打开文件(或文件类型)的应用程序,但我想要做反过来。 (也许我不得不求助于解析lsregister -dump的输出?)

    或许用一种更简单的方式来表达问题:给定一个应用程序,找到它可以打开的所有文件的最简单方法是什么?

    有什么建议吗?

2 个答案:

答案 0 :(得分:1)

查看LaunchServices和提供的LSCanRefAcceptItem() API。

答案 1 :(得分:0)

似乎使用LSItemContentTypes键是10.4之后的首选方法。

Apple: Document-Based Applications