2016-07-20 9 views
8

Ich bin ein einfaches OS X FinderSync schaffen, die für alle Dateien, um einen Menüpunkt der Steuer-/Rechtsklick-Menü ergänzt:OS X FinderSync ‚versagt‘ für/Volumes

[FIFinderSyncController defaultController].directoryURLs = [NSSet setWithObject:[NSURL fileURLWithPath:@"/"]]; 

Es funktioniert super (die (Menüeintrag erscheint usw.) für alle Dateien, außer diejenigen in /Volumes Seltsamerweise, wenn ich manuell ein Verzeichnis in /Volumes erstellen und einige Dateien dort hinzufügen, erscheint der FinderSync-Menüeintrag, wenn ich mit der rechten Maustaste klicke. Für alle Dateien in bereitgestellten Volumes (d. H. Von einem angehängten .dmg) schlägt es jedoch fehl: kein Menüelement wird angezeigt.

Direkt ein bereitgestelltes Volumen im directoryURLs Angabe nicht ähnlich:

[FIFinderSyncController defaultController].directoryURLs = [NSSet setWithObject:[NSURL fileURLWithPath:@"/Volumes/SomeMountedDMG"]]; 

Es scheint others haben ähnliche Probleme gehabt, vielleicht ist dies ein bekannter Fehler/Einschränkung?

+2

Wenn Sie eine Lösung gefunden haben, können Sie Ihre eigene Frage beantworten. Dies wird anderen helfen, die dasselbe Problem haben. – Tushar

+0

noch keine Lösung .... sorry :(Wird Apple wieder anpingen! – patrick

+0

Handelt es sich nur um gemountete DMGs oder handelt es sich um ein schreibgeschütztes Volume? Ich habe gerade ein verschließbares USB-Laufwerk getestet und die Finder-Optionen unterscheiden sich erheblich, wenn sich das USB-Laufwerk im gesperrten Modus oder entsperrt befindet. – CraneStyle

Antwort

1

Der Satz von Ordnern durch eine Erweiterung Finder Sync überwacht tun nicht Quer Grenzen Dateisystem (auch wenn dies nicht explizit in Apples Dokumentation erwähnt wird, kann es empirisch überprüft werden und ist immer noch wahr, wie von macOS 10.13.3).

Da der beabsichtigte Anwendungsfall ist, bestimmte Ordner zu überwachen, die von Synchronisationsprogrammen wie Dropbox verwaltet werden, sieht Apple dies vermutlich nicht als Einschränkung. Allerdings sind viele Entwickler implementieren Finder Sync-Erweiterungen als eine Möglichkeit des Hinzufügens von willkürlichen Elemente in die Top-Level-Kontextmenü im Finder (ohne im WAP-Untermenü eingeschränkt zu sein erscheinen), obwohl diese Nutzung ist explicitly discouraged by Apple:

Stellen Sie sicher, dass der Finder Sync-Erweiterungspunkt für die Funktionalität geeignet ist, die Sie bereitstellen möchten. Die besten Finder Sync-Erweiterungen unterstützen Apps, die den Inhalt eines lokalen Ordners mit einer Remote-Datenquelle synchronisieren. Finder Sync ist nicht als allgemeines Tool für vorgesehen, das die Benutzeroberfläche des Finders ändert.

, um diese Einschränkung zu umgehen und den Menüpunkt verfügbar für jeden Artikel im Finder sichtbar, ist es notwendig, die folgenden Schritte aus der Erweiterung machen:

  1. Scan für alle sichtbar montiert Volumes und initialisieren die directoryURLs Eigenschaft des FIFinderSyncController Objekt das Ergebnis:

    let finderSync = FIFinderSyncController.default() 
    if let mountedVolumes == FileManager.default.mountedVolumeURLs(includingResourceValuesForKeys: nil, 
                       options: [.skipHiddenVolumes]) { 
        finderSync.directoryURLs = Set<URL>(mountedVolumes) 
    } 
    
  2. Da Finder Sync-Erweiterungen langlebige Prozesse sind, registrieren für Meldungen von Volumes werden montiert, nicht gefasst und umbenannt, und aktualisieren directoryURLs entsprechend:

    let notificationCenter = NSWorkspace.shared().notificationCenter 
    notificationCenter.addObserver(forName: .NSWorkspaceDidMount, object: nil, queue: .main) { (notification) in 
        if let volumeURL = notification.userInfo?[NSWorkspaceVolumeURLKey] as? URL { 
         finderSync.directoryURLs.insert(volumeURL) 
        } 
    } 
    

    (Umgang mit Aushängen und umbenennen Benachrichtigungen werden als Übung für der Leser.)