Question

Je suis à la recherche d'un guide ou d'exemple de code pour écrire des plugins Mac OS X Finder? Il aimerait savoir comment faire des actions simples:

  1. Ajout surcouches image aux icônes
  2. ajout d'éléments de menu contextuel
  3. écouter les modifications de fichiers

J'ai trouvé les deux ressources suivantes:

Je suis tenté de revoir le code SCPlugin, mais espérais trouver un échantillon plus facile à digérer.

Était-ce utile?

La solution

Malheureusement, la programmation d'un plugin Finder fait Finalité encore besoin se salir les mains avec COM. Si vous regardez le sous-projet SCFinderPlugin du projet SCPlugin, vous trouverez qu'il suit exactement les mêmes techniques décrites dans votre premier lien, y compris la mise en place d'un vtable pour COM, l'écriture des fonctions AddRef / ReleaseRef, et ainsi de suite. L'écriture d'un plug-in, où vous gérez simultanément la vieille école de gestion de la mémoire de carbone, gestion de la mémoire COM style et Cocoa / nouveau style de gestion de la mémoire de carbone, peut être une douleur incroyable et qui ne tient pas tout à fait le fait que vous serez interagir en trois ou plus radicalement différentes API, avec différentes conventions de dénomination et d'appel sémantique. Appelant la situation hystériquement pauvre serait peu dire.

Sur le côté, le Finder sous Mac OS X 10.6 Snow Leopard a été entièrement réécrite en Cocoa - et qui viennent interfaces plugin largement supérieures. Si vous êtes assez chanceux d'être dans une situation où vous pouvez réellement cibler uniquement Snow Leopard, vous devriez probablement saisir un ADC Premier ou membres plus, téléchargez le construit préversion, et le code contre cela. En outre, votre plugin ne fonctionne pas sur 10.6 de toute façon, sans une ré-écriture de cacao, de sorte qu'il pourrait faire un bon sens de jeter un oeil à Snow Leopard avant qu'il ne soit libéré, quel que soit.

Autres conseils

Le Finder Icône projet exemple superposition de représente une petite et très basique mais en fait exemple de travail de la réponse ci-dessous.

https://github.com/lesnie/Finder-Icon-Overlay

Je sais que c'est si vieux, mais certains peuvent être encore intéressé par le sujet (?)

Voici ce que je l'ai fait sous Leopard, il (10.6). Dans un premier temps les en-têtes de bon Finder sont nécessaires. Utiliser l'outil dump de classe pour l'obtenir. Ensuite, écrivez votre code en tant que plugin SIMBL (reportez-vous à la documentation comment le faire), swizzling certaines méthodes. Par exemple, pour dessiner quelque chose sur l'icône dans ListView, drawIconWithFrame:. Méthode de la méthode TIconAndTextCell doit être outrepassée

Voici le code pour la méthode swizzling:

+ (void) Plugin_load
{
    Method old, new;
    Class self_class = [self class];
    Class finder_class = [objc_getClass("TIconAndTextCell") class];

    class_addMethod(finder_class, @selector(FT_drawIconWithFrame:),
                    class_getMethodImplementation(self_class, @selector(FT_drawIconWithFrame:)),"v@:{CGRect={CGPoint=dd}{CGSize=dd}}");

    old = class_getInstanceMethod(finder_class, @selector(drawIconWithFrame:));
    new = class_getInstanceMethod(finder_class, @selector(FT_drawIconWithFrame:));
    method_exchangeImplementations(old, new);

}

Je suis dominante "drawIconWithFrame:" méthode avec ma méthode "FT_drawIconWithFrame:". Voici la mise en oeuvre échantillon pour cette méthode.

- (void) FT_drawIconWithFrame:(struct CGRect)arg1
{
    [self FT_drawIconWithFrame:arg1];
    if ([self respondsToSelector:@selector(node)]) {
        if ([[[[NSClassFromString(@"FINode") nodeWithFENode:[(TNodeIconAndNameCell *)self node]] fullPath] lastPathComponent] hasPrefix:@"A"])
            [myPrettyIconOverlayImage drawInRect:NSMakeRect(arg1.origin.x, arg1.origin.y, arg1.size.height, arg1.size.height) fromRect:NSZeroRect operation:NSCompositeSourceOver fraction:1.0];
    }
}

Pour l'essentiel, il dessine « myPrettyIconOverlayImage » sur chaque icône de fichier avec le nom de fichier commence par la lettre « A ». Cette logique est à vous.

Faites attention à cette ligne: [self FT_drawIconWithFrame:arg1]; c'est comment appeler « super » afin d'obtenir, etc. normale icône et le nom que je sais, fait un peu bizarre, comme la boucle, mais en réalité il n'est pas. Puis envelopper dans dans le plugin SIMBL, installez SIMBL et ... run.

En raison de changements dans Lion certains travaux doivent être faites à partir de zéro (faire nouveau fichier « Finder.h » avec toutes les déclarations nécessaires en elle, trouver classess et méthodes utilisés pour remplacer), mais cette technique fonctionne toujours.

Happy Hacking!

Pour Yosemite (MacOS 10.10 et plus récent), vous pouvez utiliser d'Apple cadre FinderSync , ce qui permet des extensions du Finder à:

  • intérêt Express hiérarchies de dossiers spécifiques
  • "badges" Fournir à indiquer l'état des éléments à l'intérieur de ces hiérarchies
  • Fournir dynamique éléments de menu dans le Finder menus contextuels, lorsque les éléments sélectionnés (ou la cible de la fenêtre) sont dans les hiérarchies
  • Fournir un élément barre d'outils qui affiche un menu avec des éléments dynamiques (même si la sélection est sans rapport avec)

Il n'y a pas de système de plug-in officiel ou pris en charge pour le Finder. A partir de OS X 10.6, vous devez injecter du code dans le processus du Finder et redéfinir les méthodes objectives C dans le processus du Finder.

Je l'ai fait pour un projet exclusif. Je peux vous dire que la raison pour laquelle il n'y a pas d'exemples ou des tutoriels pour c'est parce qu'il est une tâche de développement réduisant considérablement la consommation et difficile. Pour cette raison, il y a beaucoup d'incitation pour les personnes ou les organisations qui ont accompli cela pour garder étroitement les spécificités de leur processus.

S'il n'y a aucune façon tout ce que vous pouvez atteindre votre objectif en utilisant l'API de services, faites-le. L'écriture d'un plugin Finder vous prenez 1-2 solide mois de développement minutieux et de connaissances assez profonde de C et Objective-C internes.

Si vous êtes toujours convaincu que vous voulez faire cela, saisir mach_star. Bonne chance.

Pour autant que je sache, il n'y a pas d'architecture de plug-in officiel du Finder. Vous pouvez être en mesure d'ajouter des superpositions d'image aux icônes par une application externe sans avoir à brancher dans le Finder, bien qu'il ne serait pas à la volée. Je ne pense pas qu'il y ait un moyen d'ajouter des éléments de menu contextuel de côté des actions de dossier et Automator. Vous pouvez également envisager d'écrire une application externe pour surveiller le système de fichiers change en utilisant le

Voici une solution réalisée pour badges d'icône du Finder et des menus contextuels dans Lion et Mountain Lion en utilisant les techniques décrites par Les Nie.

Liferay Nativité fournit un ensemble de scripts qui SWIZZLE les méthodes du Finder pertinents et un client Java pour les icônes et la mise en menus contextuels. Il comprend également des projets équivalents pour Windows et Linux.

Le projet est open source sous licence LGPL, alors ne hésitez pas à contribuer des correctifs ou des améliorations bugs!

Les tries sont minces; il n'a jamais été vraiment clair pour moi si Plugins du Finder sont effectivement pris en charge. Quelques pistes plus, bien que:

  • SampleCMPlugIn - Carbon-base bien sûr, car il en est de Finder. Notez que presque tous les plug-in Finder va probablement arrêter de travailler avec 10.6.
  • Automator peut sauver des choses comme un « plug-in Finder. » Il est une version plus prise en charge de ce que vous discutez, mais bien sûr, moins souple.

Pour ajouter Finder / superpositions icône du navigateur de fichiers et les menus contextuels, d'une manière multi-plateforme, de Java, jetez un oeil à la page la bibliothèque de Liferay Nativité.

Je fais aussi mention dans un autre responsable publier, qui contient également des liens vers docs et API 'Finder' Sync d'Apple.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top