it-swarm.com.de

So schreiben Sie das OS X Finder-Plugin

Ich bin auf der Suche nach einem Leitfaden oder Beispielcode zum Schreiben von Mac OS X Finder-Plugins? Es würde gerne wissen, wie man einige einfache Aktionen ausführt:

  1. hinzufügen von Bild-Overlayern zu Symbolen
  2. kontextmenüelemente hinzufügen
  3. dateiänderungen anhören

Ich habe die folgenden zwei Ressourcen gefunden:

Ich bin versucht, den SCPlugin-Code zu überprüfen, hoffte jedoch, eine leichtere Probe zu finden, die zu verdauen ist.

46
notnoop

Leider ist das Programmieren eines Finder-Plugins eigentlich macht es erfordert immer noch, sich mit COM die Hände schmutzig zu machen. Wenn Sie sich das SCFinderPlugin-Teilprojekt des SCPlugin-Projekts ansehen, werden Sie feststellen, dass es genau den gleichen Techniken folgt, die in Ihrem ersten Link beschrieben wurden. Dazu gehören das Einrichten einer vtable für COM, das Schreiben von AddRef/ReleaseRef-Funktionen usw. Wenn Sie ein Plug-In schreiben, in dem Sie gleichzeitig das Carbon Memory-Management der alten Schule, das COM-Style-Memory-Management und das neue Carbon-Memory-Management von Cocoa bzw. das neue Carbon-Management verwalten, kann dies ein unglaublicher Schmerz sein - und das ignoriert völlig die Tatsache, dass Sie es sind Interaktion in drei oder mehr grundlegend unterschiedlichen APIs mit unterschiedlichen Namenskonventionen und Aufrufsemantik. Die Situation hysterisch arm zu nennen, wäre eine riesige Untertreibung.

Auf der positiven Seite wurde der Finder unter Mac OS X 10.6 Snow Leopard vollständig in Cocoa umgeschrieben - und damit auch weit überlegene Plugin-Schnittstellen. Wenn Sie das Glück haben, sich in einer Situation zu befinden, in der Sie eigentlich nur Snow Leopard anvisieren können, sollten Sie sich wahrscheinlich eine ADC Premier-Mitgliedschaft oder eine höhere Mitgliedschaft besorgen, die Vorabaufbereitungs-Builds herunterladen und dagegen programmieren. Außerdem funktioniert Ihr Plugin unter 10.6 ohnehin nicht ohne Cocoa-Umschreibung. Daher kann es sinnvoll sein, Snow Leopard vor der Veröffentlichung zu betrachten.

17

Das Finder Icon Overlay Beispielprojekt stellt ein kleines und sehr einfaches, aber tatsächlich funktionierendes Beispiel für die Antwort unten dar.

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

Ich weiß, dass das so alt ist, aber manche interessieren sich vielleicht noch für das Thema (?)

Hier ist, was ich unter Leopard (10.6) gemacht habe. Zuerst werden richtige Finder-Header benötigt. Verwenden Sie das Class-Dump-Tool, um es zu erhalten. Dann schreiben Sie Ihren Code als SIMBL-Plugin (siehe Dokumentation, wie Sie das tun können), wobei einige Methoden beschrieben werden. Um beispielsweise in ListView etwas über das Symbol zu zeichnen, muss die drawIconWithFrame: -Methode der TIconAndTextCell-Methode überschrieben werden.

Hier ist der Code für die Methode 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:)),"[email protected]:{CGRect={CGPoint=dd}{CGSize=dd}}");

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

}

Ich überschreibe die Methode "drawIconWithFrame:" mit meiner Methode "FT_drawIconWithFrame:". Nachfolgend finden Sie eine Beispielimplementierung für diese Methode.

- (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];
    }
}

Im Wesentlichen zeichnet es "myPrettyIconOverlayImage" über jedes Symbol für eine Datei, deren Dateiname mit dem Buchstaben "A" beginnt. Diese Logik liegt bei Ihnen.

Achten Sie auf diese Zeile: [self FT_drawIconWithFrame:arg1]; So rufen Sie 'super' auf, um ein normales Symbol und einen Namen usw. zu erhalten. Ich weiß, sieht komisch aus, wie eine Schleife, ist es aber nicht. Dann in SIMBL Plugin einbinden, SIMBL installieren und ... ausführen.

Aufgrund von Änderungen in Lion müssen einige Arbeiten von Grund auf durchgeführt werden (neue "Finder.h" -Datei mit allen darin enthaltenen Deklarationen erstellen, geeignete Klassen und Methoden zum Überschreiben finden), aber diese Technik funktioniert immer noch. 

Viel Spaß beim Hacken!

28
Les Nie

Für Yosemite (MacOS 10.10 und neuer) können Sie Apples FinderSync-Framework verwenden, mit dem Finder-Erweiterungen:

  • Interesse an bestimmten Ordnerhierarchien bekunden 
  • Stellen Sie "Badges" für Den Status der Elemente innerhalb dieser Hierarchien bereit 
  • Stellen Sie dynamischemenu-Elemente in den Kontextmenüs des Finders bereit, wenn sich die ausgewählten Elemente (oder Das Fensterziel) in diesen Hierarchien befinden 
  • Stellen Sie ein Symbolleistenelement .__ zur Verfügung, das ein Menü mit dynamischen Elementen anzeigt (auch wenn die Auswahl __. Nicht verbunden ist).
22

Es gibt kein offizielles oder unterstütztes Pluginsystem für den Finder. Ab OS X 10.6 müssen Sie Code in den Finder-Prozess einfügen und Objective C-Methoden im Finder-Prozess überschreiben.

Ich habe das für ein proprietäres Projekt gemacht. Ich kann Ihnen sagen, dass der Grund dafür, dass es keine Beispiele oder Tutorials gibt, darin besteht, dass es eine sehr schwierige und zeitaufwendige Entwicklungsaufgabe ist. Aus diesem Grund besteht für Einzelpersonen oder Organisationen, die dies erreicht haben, ein großer Anreiz, die Einzelheiten ihres Prozesses genau zu überwachen.

Wenn Sie Ihr Ziel mithilfe der Services-API auf irgendeine Weise erreichen können, tun Sie dies. Wenn Sie ein Finder-Plugin schreiben, benötigen Sie 1-2 solide Monate sorgfältiger Entwicklung und einigermaßen fundiertes Wissen über C- und Objective-C-Interna.

Wenn Sie immer noch davon überzeugt sind, dass Sie dies tun möchten, greifen Sie zu mach_star . Viel Glück.

14
anthony

Hier ist eine vollständige Lösung für Finder-Symbolabzeichen und Kontextmenüs in Lion und Mountain Lion, die die von Les Nie beschriebenen Techniken verwenden.

Liferay Nativity enthält ein Skript-Paket, das die relevanten Finder-Methoden durchdringt, sowie einen Java-Client zum Einstellen der Symbole und Kontextmenüs. Es enthält auch gleichwertige Projekte für Windows und Linux.

Das Projekt ist Open Source unter LGPL, Sie können also gerne Fehlerbehebungen oder Verbesserungen einbringen!

2
dejuknow

Soweit ich weiß, gibt es keine offizielle Plugin-Architektur für den Finder. Sie können möglicherweise Bildüberlagerungen zu Symbolen über eine externe Anwendung hinzufügen, ohne sich mit dem Finder verbinden zu müssen, obwohl dies nicht sofort möglich wäre. Ich glaube nicht, dass es eine Möglichkeit gibt, kontextabhängige Menüelemente neben Folder Actions und Automator hinzuzufügen. Sie können auch das Schreiben einer externen Anwendung zum Überwachen von Dateisystemänderungen mithilfe der FSEvents-API untersuchen.

2
Martin Gordon

Die Pflückungen sind schlank; Es ist mir nie wirklich klar, ob Finder Plugins tatsächlich unterstützt werden. Noch ein paar Hinweise:

  • SampleCMPlugIn - Natürlich auf Kohlenstoffbasis, da Finder auch so ist. Beachten Sie, dass fast alle Finder-Plugins mit 10.6 wahrscheinlich nicht mehr funktionieren werden.
  • Automator kann Dinge als "Finder Plugin" speichern. Es ist eine eher unterstützte Version von dem, was Sie besprechen, aber natürlich weniger flexibel.
1
Rob Napier

Wenn Sie über Java plattformübergreifend Finder/Dateibrowser-Symbol-Overlays und Kontextmenüs hinzufügen möchten, sehen Sie sich die Bibliothek Liferay Nativity an.

Ich erwähne dies auch in einem anderen SO post , der auch Links zu Apples "Finder Sync" -Dokumenten und API enthält.

0
Big Rich