给定应用程序路径(或应用程序的NSBundle
等),是否有方法可以轻松/有效地确定应用程序可以打开哪些内容类型?应用程序能够理解的内容类型
我最初的尝试是读取应用程序的Info.plist文件并提取kUTExportedTypeDeclarationsKey
密钥下列出的内容类型。但是,这种方法存在一些缺陷,我一直无法解决。
- 并非所有的应用程序都使用此密钥。例如,BBEdit不会,而是列出一大堆可识别的文件扩展名。
- UTI区分大小写。例如,Pages将
com.apple.iWork.Pages.pages
列为导出的内容类型,但Pages文档实际上没有在其内容类型树中列出该类型。文档使用com.apple.iwork.pages.pages
,由iWork quicklook生成器(位于/Library/QuickLook/iWork.qlgenerator
)定义。
在知道一些的LaunchServices功能(LSCopyApplicationURLsForURL()
,LSCopyApplicationForMIMEType()
,等等),我获得了可以打开一个文件(或文件类型)的应用程序,但我喜欢做的倒数。 (也许我不得不诉诸解析lsregister -dump
的输出?)
也许一个简单的方法来说明问题将是:给定一个应用程序,有什么最简单的方法来找到它可以打开的所有文件?
有什么建议吗?
为了更清楚起见,LSItemContentTypes不是顶级密钥,它在CFBundleDocumentTypes数组中使用。 – JWWalker 2011-03-19 05:33:46