0 votes

Que fait MacOS lorsqu'il ouvre un fichier ?

Contexte de cette question :

J'ai construit une application avec LabVIEW pour ouvrir un fichier .tdms, et je sais qu'elle peut recevoir les arguments qui lui sont passés car le code suivant fonctionne parfaitement :

open -a /Application/My.app --args /path/to/file.tdms

Puisque la ligne de commande fonctionne, j'ai décidé d'associer .tdms à mon application afin de pouvoir double-cliquer sur le fichier pour l'ouvrir, et j'y parviens en modifiant My.app/Contents/info.plist .

Lorsque j'essaie d'ouvrir un fichier en double-cliquant dessus ou en choisissant une application dans la liste "Ouvrir avec...", une fenêtre contextuelle s'affiche.

"My.app" est endommagé et ne peut pas être ouvert. Vous devez la déplacer dans la Corbeille.

Certains ont suggéré xattr -cr /Application/My.app résoudrait le problème, mais cela ne fonctionne pas pour moi.

C'est pourquoi je voudrais savoir ce que fait MacOS en arrière-plan lors de l'ouverture d'un fichier. Comment les arguments sont-ils transmis à l'application ?


Informations complémentaires :

  1. J'utilise "Open Application Reference" et Property Node dans LabVIEW pour recevoir les arguments qui sont transmis à mon application.

  2. J'ai ajouté le code suivant dans info.plist pour associer le type de fichier à mon application :

    <key>CFBundleDocumentTypes</key>
    <array>
        <dict>
            <key>CFBundleTypeExtensions</key>
            <array>
                <string>tdms</string>
            </array>
            <key>CFBundleTypeRole</key>
            <string>Viewer</string>
            <key>CFBundleTypeName</key>
            <string>National Instruments TDMS File</string>
            <key>CFBundleTypeIconFile</key>
            <string>icon.icns</string>
        </dict>
    </array>

1voto

Graham Miln Points 39606

LaunchServices

MacOS comprend Services de lancement . Ce code est chargé de lancer les applications et de leur fournir les détails des fichiers à ouvrir ou à imprimer :

Launch Services est une API qui permet à une application en cours d'exécution d'ouvrir d'autres applications, leurs fichiers de documents ou leurs URL (localisateurs de ressources uniformes) d'une manière similaire au Finder ou au Dock. En utilisant les services de lancement, une application peut effectuer des tâches telles que :

  • Ouvrir (lancer ou activer) une autre application
  • Ouvrir un document ou un URL dans une autre application
  • Identifier l'application préférée pour ouvrir un document ou un URL donné
  • Enregistrer des informations sur les types de fichiers de documents et d'URL qu'une application est capable d'ouvrir.
  • Obtenir les informations appropriées pour afficher un fichier ou un URL à l'écran, telles que son icône, son nom d'affichage et sa chaîne de caractères.
  • Maintenir et mettre à jour le contenu du menu Éléments récents

AEOpenDocuments

Pour ouvrir les fichiers, les applications graphiques sous MacOS reçoivent des AppleEvents de type odoc :

Événement qui fournit à une application une liste de documents à ouvrir. Envoyé, par exemple, lorsqu'un utilisateur sélectionne un ou plusieurs documents pour votre application dans le Finder et double-clique dessus.

Les arguments de l'application lancée n'incluent pas les chemins des fichiers à ouvrir.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X