Учитывая путь приложения (или NSBundle
к приложению и т. Д.), Есть ли способ легко/эффективно определить, какие типы содержимого могут открываться приложением?Типы контента, понятные приложению
Моя первоначальная попытка состояла в том, чтобы прочитать файл Info.plist приложения и извлечь типы содержимого, перечисленные под ключом kUTExportedTypeDeclarationsKey
. Однако есть некоторые недостатки такого подхода, с которыми я не мог работать.
- Не все приложения используют этот ключ. Например, BBEdit нет, но вместо этого перечисляет целую кучу признанных расширений файлов.
- UTIs чувствительны к регистру. Страницы, например, перечисляют
com.apple.iWork.Pages.pages
как экспортированный тип контента, но нет документа Pages на самом деле имеет этот тип, указанный в его дереве типов контента. В документах используетсяcom.apple.iwork.pages.pages
, который определяется генератором quicklook iWork (по адресу/Library/QuickLook/iWork.qlgenerator
).
В знает, что с некоторыми из функций LaunchServices (LSCopyApplicationURLsForURL()
, LSCopyApplicationForMIMEType()
и т.д.), я могу получить приложения, которые могут открыть файл (или тип файла), но я хотел бы сделать обратное. (Возможно, мне придется прибегнуть к разбору вывода lsregister -dump
?)
Возможно, более простой способ сформулировать вопрос: учитывая приложение, какой самый простой способ найти все файлы, которые он может открыть?
Любые предложения?
Чтобы быть яснее, LSItemContentTypes не является ключом верхнего уровня, он используется в массиве CFBundleDocumentTypes. – JWWalker