2010-08-10 3 views
1

Je crée une application pour Mac OS X, et je voulais savoir si je l'ai utilisé correctement dans le fichier IVU .plist de l'application:Ai-je utilisé correctement les identificateurs de type uniforme?

<key>UTExportedTypeDeclarations</key> 
<array> 
    <dict> 
     <key>UTTypeIdentifier</key> 
     <string>com.petroules.silverlock.database</string> 
     <key>UTTypeDescription</key> 
     <string>Silverlock Database File</string> 
     <key>UTTypeIconFile</key> 
     <string>app.icns</string> 
     <key>UTTypeConformsTo</key> 
     <array> 
      <string>public.data</string> 
     </array> 
     <key>UTTypeTagSpecification</key> 
     <dict> 
      <key>com.apple.ostype</key> 
      <string>SDBX</string> 
      <key>public.filename-extension</key> 
      <array> 
       <string>sdbx</string> 
      </array> 
      <key>public.mime-type</key> 
      <string>application/octet-stream</string> 
     </dict> 
    </dict> 
</array> 

Ce code semble fonctionner, même si un double clic sur un Le fichier .sdbx dans Finder n'entraîne pas l'ouverture du fichier par mon application ... mais il se peut que ce soit mon code (quelque chose que j'examinerai plus tard). En outre, le format de mon type de fichier est un contenu crypté codé en base-64 ... est le flux d'application/octet le meilleur type MIME à utiliser pour cela ou y a-t-il autre chose que je devrais utiliser, et pourrais-je rencontrer des problèmes de compatibilité n'importe où dans le spectre en utilisant un type MIME moins commun?

Aussi, j'inclus le code suivant:

<key>CFBundleDocumentTypes</key> 
<array> 
    <dict> 
     <key>CFBundleTypeExtensions</key> 
     <array> 
      <string>sdbx</string> 
     </array> 
     <key>CFBundleTypeIconFile</key> 
     <string>app.icns</string> 
     <key>CFBundleTypeName</key> 
     <string>com.petroules.silverlock.database</string> 
     <key>CFBundleTypeRole</key> 
     <string>Editor</string> 
     <key>LSItemContentTypes</key> 
     <array> 
      <string>com.petroules.silverlock.database</string> 
     </array> 
     <key>LSHandlerRank</key> 
     <string>Owner</string> 
    </dict> 
</array> 

Dois-je inclure du tout parce que j'ai le code UTI ci-dessus? Est-ce nécessaire? Quelles sont les différences entre les deux? Je n'ai pas vraiment pu vérifier cela à partir de la documentation. Merci :)

Répondre

2

Pour savoir si cela ou votre code est en faute, quittez votre application avant de double-cliquer sur le fichier. Si cela lance votre application, mais n'ouvre pas le fichier, alors votre Info.plist est très bien et votre problème est dans -[[NSApp delegate] application:openFile:]. Si l'application ne démarre pas du tout, vous pouvez être sûr que votre Info.plist n'est pas correct en ce qui concerne les services de lancement.

Vous avez besoin des strophes UTExportedTypeDeclarations et CFBundleDocumentTypes. Le premier indique à Launch Services que votre UTI personnalisée existe. La seconde indique que votre application est un éditeur pour ce type de fichier.

+0

J'aurais dû mentionner que c'est une application basée sur Qt, donc '[[application NSapp délégué]: openFile:]' ne s'applique pas ... Je vais devoir vérifier mon code demain. Merci pour les informations concernant le fichier de plist et les infections urinaires. –

+0

Voir http://stackoverflow.com/questions/3451280/opening-files-from-finder-with-a-qt-based-application concernant l'ouverture de fichiers dans les applications Qt quand on double-clique sur Finder. –

Questions connexes