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.
- 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.
- 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 utilisentcom.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?
Pour être plus clair, LSItemContentTypes est pas une clé de haut niveau, il est utilisé dans le tableau CFBundleDocumentTypes. – JWWalker