2010-10-30 5 views
4

Compte tenu d'un chemin d'application (ou NSBundle à une application, etc.), est-il un moyen facilement/déterminer efficacement quels types de contenu que l'application peut ouvrir?types de contenu compris par une application

Ma première tentative a été de lire le fichier Info.plist de l'application et d'extraire les types de contenu répertoriés sous la clé kUTExportedTypeDeclarationsKey. Cependant, il y a quelques défauts avec cette approche que je n'ai pas pu contourner.

  1. Toutes les applications n'utilisent pas cette clé. Par exemple, BBEdit ne le fait pas, mais liste tout un tas d'extensions de fichiers reconnues.
  2. Les UTI sont sensibles à la casse. Pages, par exemple, répertorie com.apple.iWork.Pages.pages comme un type de contenu exporté, mais aucun document Pages n'a ce type répertorié dans son arborescence de type de contenu. Les documents utilisent com.apple.iwork.pages.pages, qui est défini par le générateur iWork quicklook (à /Library/QuickLook/iWork.qlgenerator).

En savoir que certaines des fonctions LaunchServices (LSCopyApplicationURLsForURL(), LSCopyApplicationForMIMEType(), etc), je peux obtenir les applications qui peuvent ouvrir un fichier (ou un type de fichier), mais je voudrais faire l'inverse. (Peut-être que je devrai recourir à l'analyse de la sortie de lsregister -dump?)

Peut-être une façon plus simple de formuler la question serait: Étant donné une application, quelle est la meilleure façon de trouver tous les fichiers qu'elle peut ouvrir?

Des suggestions?

Répondre

0

Il semble en utilisant la touche LSItemContentTypes est la méthode préférée post-10.4.

Apple: Document-Based Applications

+0

Pour être plus clair, LSItemContentTypes est pas une clé de haut niveau, il est utilisé dans le tableau CFBundleDocumentTypes. – JWWalker

Questions connexes