2010-10-30 3 views
4

Учитывая путь приложения (или NSBundle к приложению и т. Д.), Есть ли способ легко/эффективно определить, какие типы содержимого могут открываться приложением?Типы контента, понятные приложению

Моя первоначальная попытка состояла в том, чтобы прочитать файл Info.plist приложения и извлечь типы содержимого, перечисленные под ключом kUTExportedTypeDeclarationsKey. Однако есть некоторые недостатки такого подхода, с которыми я не мог работать.

  1. Не все приложения используют этот ключ. Например, BBEdit нет, но вместо этого перечисляет целую кучу признанных расширений файлов.
  2. UTIs чувствительны к регистру. Страницы, например, перечисляют com.apple.iWork.Pages.pages как экспортированный тип контента, но нет документа Pages на самом деле имеет этот тип, указанный в его дереве типов контента. В документах используется com.apple.iwork.pages.pages, который определяется генератором quicklook iWork (по адресу /Library/QuickLook/iWork.qlgenerator).

В знает, что с некоторыми из функций LaunchServices (LSCopyApplicationURLsForURL(), LSCopyApplicationForMIMEType() и т.д.), я могу получить приложения, которые могут открыть файл (или тип файла), но я хотел бы сделать обратное. (Возможно, мне придется прибегнуть к разбору вывода lsregister -dump?)

Возможно, более простой способ сформулировать вопрос: учитывая приложение, какой самый простой способ найти все файлы, которые он может открыть?

Любые предложения?

ответ

0

Кажется, что ключ LSItemContentTypes является предпочтительным методом post-10.4.

Apple: Document-Based Applications

+0

Чтобы быть яснее, LSItemContentTypes не является ключом верхнего уровня, он используется в массиве CFBundleDocumentTypes. – JWWalker

Смежные вопросы