Типы контента, понятные приложению - PullRequest
4 голосов
/ 31 октября 2010

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

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

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

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

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

Есть предложения?

Ответы [ 2 ]

1 голос
/ 15 апреля 2011

Посмотрите на LaunchServices и предоставляемый LSCanRefAcceptItem () API.

0 голосов
/ 06 января 2011

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

Apple: приложения для документов

...