Créer des objets spéciaux dans le finder (comme iPhoto Library)

FKDEVFKDEV Membre
août 2012 modifié dans API AppKit #1
Je voudrais créer un programme (app ou driver ?) permettant de faire apparaà®tre dans le finder des objets spéciaux un peu comme le dossier iPhoto Library.



Ces objets pourraient contenir d'autres objets spéciaux (comme des dossiers). On pourrait déposer des fichiers sur ces objets spéciaux, ce qui déclencherait une action dans l'app gérant le dossier.

Ces objets devrait apparaà®tre dans le finder.



Par exemple un de ces objets pourrait représenter un site FTP distant et on pourrait le déplier pour voir ce qu'il y a sur le site distant, déposer des fichiers dessus pour les uploader, etc

Ce n'est pas exactement ce que je veux faire mais c'est pour vous donner une idée des fonctionnalités requises.



Avez-vous une idée du framework à  utiliser ? Et si c'est possible sur Mac, tout simplement ?

Réponses

  • fouffouf Membre
    Je pense que cela devrait être possible mais ce n'est sûrement pas simple.



    Pour la première partie de ta question (des objets spéciaux qui contiennent d'autres objets), tu peux regarder du côté des file wrapper. Il ne s'agit pas ici tant de la classe NSFileWrapper de l'AppKit mais de l'utilisation de dossiers avec une extension. De cette manière tu caches son contenu au Finder (si tu définis les bonnes options de type, cf. LSTypeIsPackage) et l'utilisateur le voit comme un simple fichier. Par contre, il suffit d'un simple clique droit -> Afficher le contenu du paquet pour voir ce qu'il contient.



    Un des moyens envisageables pour des actions automatiques lors est l'utilisation des AppleScripts mais je crois qu'ils ne sont plus développé depuis un certain temps. Tu peux par contre regarder du côté de Automator qui sont censé les remplacer.
  • AliGatorAliGator Membre, Modérateur
    août 2012 modifié #3
    Ca dépend vraiment de ce que tu veux faire.



    Si c'est un simple conteneur, créer un bundle (aussi appelé "file wrapper") qui est en fait en vrai un dossier, mais représenté dans le Finder comme un fichier unique, peut te convenir. Mais pour interagir avec, il faudra double-cliquer dessus, pour ouvrir l'application associée au bundle (tout comme un double-clic sur un document ouvre l'appli associée) qui va savoir gérer ce type de document.



    C'est déjà  une première solution, avec une application que tu développerais en faisant en sorte qu'elle se lance rapidement et éventuellement même n'apparaisse pas dans le Dock. Comme ça pour l'utilisateur, un double-clic sur le bundle va lui afficher une fenêtre permettant d'interagir avec ce bundle comme tu l'entends, en vrai ça sera une fenêtre de ton appli mais pour l'utilisateur si ton appli est bien intégrée et masquée du Dock ça semblera venir du Finder.



    Si c'est vraiment un pseudo système de fichier, comme un peu l'exemple du FTP dont tu parlais, où tu n'as pas d'interface dédiée et que les fenêtres manipulées sont donc directement celles du Finder, mais que tu veux faire des actions particulières lorsqu'un fichier est créé dans ton bundle, déplacé, supprimé, etc... alors tu as d'autres options :

    - Utiliser les FSEvents pour surveiller les events de création/déplacement/suppression/... du FileSystem sur ce dossier en question (voir la doc Apple sur les FSEvents)

    - Créer un faux FileSystem, en utilisant des outils du type MacFUSE et en codant toi-même un plugin MacFUSE pour correspondre à  tes besoins (mais là  ça commence à  aller chercher loin)
  • Merci pour les infos.

    Cela m'a permis de démarrer mes recherches.



    En ce qui concerne le faux filesystem, le mot clé c'est plug-in VFS. Ce sont des kernel extensions donc difficle à  faire, même s'il ya plusieurs exemples disponibles.



    Une aute solution évoquée dans la doc Apple est le développement d'un serveur NFS local en mode user space. Mais je n'ai pas trouvé d'implementation déjà  faite en obective-C.



    Je pense que je vais utiliser la solution du bundle associée à  une application qui ouvrira une fenêtre ressemblant au finder.
  • AliGatorAliGator Membre, Modérateur
    Bah justement je crois (faudrait confirmer en faisant une recherche, je dis ça de mémoire) que l'avantage du projet FUSE c'est de pouvoir développer un Virtual FileSystem... dans le user-space (FUSE intégrant la couche faisant la transition User-Space <-> Kernel Space).

    D'où son nom d'ailleurs, FUSE voulant dire "FileSystem in User Space". Du coup ça doit, je suppose, faciliter un peu le développement de drivers ?

    Bon en même temps j'ai jamais mis les mains dedans, je sais pas du tout le niveau de complexité que ça requiert de faire un truc du genre.
  • J'avais zappé le conseil sur MacFUSE car dans mon esprit c'était juste un FS NTFS.

    Effectivement tu as raison, cela permet de créer des FS facilement.

    Maintenant il faut plutôt utiliser OSXFUSE car MacFUSE a été abandonné.

    Le seul inconvénient c'est que l'utilisateur doit installer OSXFUSE au préalable et qu'on est complètement dépendant du projet notamment pour les mises à  jour liées aux nouvelles versions de OSX.



    Sinon, cela a l'air assez simple à  mettre en oeuvre d'après les exemples :

    https://github.com/osxfuse/filesystems/blob/master/filesystems-objc/HelloFS/HelloFuseFileSystem.m





    Une autre solution, similaire à  la solution du serveur NFS, est la mise en place d'un serveur WEBDAV en local en utilisant CocoaHTTPServer comme base. Le serveur WEBDAV peut être monter directement en utilisant la commande mount_webdav.
Connectez-vous ou Inscrivez-vous pour répondre.