Wie konfiguriere ich benutzerdefinierte URL-Handler unter OS X?


64

Ich habe viel online gelesen über benutzerdefinierte URL-Handler / benutzerdefinierte Protokoll-Handler wie:

Ich habe erfahren, dass Sie dem System mitteilen können, dass ein bestimmtes Programm mit der Info.plistDatei ein bestimmtes Schema / Protokoll verarbeiten kann:

<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleURLName</key>
        <string>Local File</string>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>local</string>
        </array>
    </dict>
</array>
<key>NSUIElement</key>
<true/>

Wenn es jedoch mehrere Anwendungen gibt, die denselben URL-Handler öffnen können, mailto:wie geben Sie beispielsweise an, welchen das System verwenden soll?

Es gab einige Verweise auf Dienstprogramme wie das, More Internet preference panedie auf der Website des Autors nicht mehr verfügbar zu sein scheinen. Ich habe es online von Googling gefunden, aber es scheint ein bisschen wackelig zu sein - wie es für eine ältere OSX geschrieben wurde - vielleicht Tiger.

Ich konnte keine Informationen zum Festlegen des URL-Handlers für Protokolle und benutzerdefinierte Protokolle finden. Ich gehe davon aus, dass es plistirgendwo eine Datei gibt, die ich bearbeiten kann - oder gibt es vielleicht ein neueres, besseres Dienstprogramm, das gut mit Mountain Lion zusammenarbeitet?

Antworten:


55

Die gesuchte Datei lautet ~/Library/Preferences/com.apple.LaunchServices/com.apple.launchservices.secure.plist.

Es enthält ein Array mit dem Namen LSHandlers, und die Dictionary-untergeordneten Elemente, die ein definieren, LSHandlerURLSchemekönnen mit dem Befehl geändert werden LSHandlerRole.

Anstatt diese Datei manuell zu bearbeiten, können Sie auch RCDefaultApp verwenden , wodurch Sie einen schönen Einstellungsbereich erhalten. Es soll nicht für MacOS 10.12 und höher funktionieren, aber ich kann bestätigen, dass es unter MacOS 10.14 läuft.

Eine Alternative ist SwiftDefaultApps .

Zum Beispiel hier ist SVN und SSH:

… Und in der RCDefaultApp:


35
4 Minuten 19 Sekunden? Ernsthaft?
Daniel Beck

2
Danke für die schnelle und ausführliche Antwort. Sieht gut aus! Frage aber - Ich glaube, ich habe RCDefaultApp schon einmal ausprobiert und hatte ein Problem damit. Hat es bei Ihnen reibungslos funktioniert?
KWD

@cwd Ich muss ehrlich sagen, ich benutze es nicht oft. Mehr zu den Screenshots für Super User als alles andere :) Immer , wenn ich zu ändern Dateizuordnungen muss ich tun es durch das Get Info ... im Finder - Dialog. Ich musste nie das Protokoll und die MIME-Handler ändern. Aber es schien stabil genug für mich zu sein.
Slhck

Dies scheint eine echte "App" zu öffnen. Was ist, wenn ich eine benutzerdefinierte Verarbeitung mithilfe eines Terminalbefehls usw. ausführen möchte?
nute

1
@nute Nur von oben, nicht sicher. Vielleicht eine mit Automator erstellte App, die ein Shell-Skript umschließt?
Slhck

14

Update Jul 2017: RCDefaultApp und lstoolnicht mehr unter macOS 10.12 oder neuer lauffähig . Wir müssen eine neue Lösung finden.

Bearbeiten März 2018
Ich habe SwiftDefaultApps gefunden , kann aber nicht testen, da ich noch nicht in High Sierra bin.


In Anlehnung an die vorherige Antwort können Sie, wenn Sie dies in der Befehlszeile tun lstoolmöchten, den Befehl verwenden, der den Kern von RCDefaultApp bildet RCDefaultApp.prefPane/Contents/Resources/lstool.

Die Verwendung ist unkompliziert:

[~]$lstool --help
Usage:

lstool read [<lsscheme> [<type>]]
lstool [-n] write <lsscheme> <type> <app>
lstool [-n] setoption <lsscheme> <type> login|ignorecreator YES|NO
lstool [-n] register {<app>}
lstool [-n] unregister {<path> | <app>}
lstool apps

-n means do not make changes
<lsscheme> is one of: internet, media, url, extension, uti, mime, ostype
<app> is the path to an application or a name to be looked up

2
Ich habe unter github.com/Lord-Kamina/SwiftDefaultApps einen möglichen Ersatz für RCDefaultApp gefunden, obwohl Sie ihn selbst mit Xcode erstellen müssen.
luckman212

Ich verwende Version 2.1 von RCDefaultApp und es funktioniert gut für mich am 10.12. Zumindest werden noch alle Artikel aufgelistet. Oder funktioniert nur eine bestimmte Operation nicht mehr? Bitte erläutern
SuperTempel

@SuperTempel Das lstoolBefehlszeilentool zeigt diesen Fehler an, wenn Sie versuchen, ihn auszuführen: objc[1049]: Objective-C garbage collection is no longer supported.( lstoolDies ist das interne Programm, das vom Einstellungsbereich von RCDefaultApp verwendet wird. Obwohl der Einstellungsbereich anscheinend funktioniert, glaube ich nicht, dass er etwas bewirken kann, da er lstooldefekt ist. )
Quinn Comendant

SwiftDefaultApps funktioniert anscheinend nicht auf Intel-Prozessoren. Kein Fix bis mindestens April 2018.
Quinn Comendant

3
Ich bin der Entwickler von SwiftDefaultApps. SWDA wurde von Anfang an mit macOS Sierra und höher programmiert. Es funktionierte in 10.13 hauptsächlich aufgrund eines Fehlers in Swift oder macOS selbst nicht, aber es scheint mit dem Update auf 10.13.4 / Swift 4.1 behoben worden zu sein.
Gregorio Litenstein

11

Auflisten der aktuellen Einstellungen für den LaunchServices-URL-Handler unter Apple OS X 10.10 (Yosemite):

defaults read com.apple.LaunchServices/com.apple.launchservices.secure

Yay für die Verwendung der eingebauten Tools, die nicht kaputt gehen oder erfordern, dass Sie etwas herunterladen.
xdhmoore

Dies listet jedoch nicht alle Standardeinstellungen für jedes Protokoll auf, sondern nur einige.
Vadim Peretokin

5

Ich habe tatsächlich eine Anwendung geschrieben, die die Registrierung von benutzerdefinierten URL-Protokollen vereinfacht, wenn jemand interessiert ist. Es heißt LinCastor ( http://onflapp.wordpress.com/lincastor/ ). Handler können als AppleScript- oder Shell-Skript (das Perl, Python oder was auch immer sein kann) definiert werden.


Sehr nette Idee, aber ich fürchte, ich kann das mitgelieferte Beispielskript nicht zum Laufen bringen. Weitere Informationen
Flash Sheridan

Das schien ein verwirrender Zeilenumbruch in der Beispieldatei zu sein, der durch Ausführen des Skripts über die Befehlszeile diagnostiziert wurde. ("/ Bin / sh: schlechter Interpreter: Operation nicht erlaubt") Das Speichern einer Kopie in BBEdit und das Ändern und Wiederaufladen der Zeilenumbrüche von / zu Windows haben das Problem umgangen.
Flash Sheridan

5

Das Öffnen der Datei mit XCode funktioniert ganz einfach.

Das Verwenden des Befehls build in, plutilwie in der Antwort unter https://discussions.apple.com/thread/5815759 beschrieben , um zwischen dem Format xml1 oder binary1 zu konvertieren, funktioniert ähnlich.

plutil -convert xml1 /file-i-wish

nano /file-i-wish & save file 

plutil -convert binary1 /file-i-wish

Keine Notwendigkeit für "fremde" Werkzeuge :-)


4

Sie können auch duti verwenden :

echo $'com.apple.mail mailto\ncom.googlecode.iterm2 x-man-page'>~/.duti;duti ~/.duti

0

Ich habe gerade das alte More Internet unter El Capitan ausprobiert.

Es ist flippig und funktioniert nur, wenn Sie mit den Aufwärts- und Abwärtspfeiltasten das Protokoll auswählen und das APP-Symbol per Drag & Drop in das Fenster ziehen, um eine Änderung vorzunehmen.

Ich habe die Standardeinstellung von Safari auf Chrome geändert, und die Änderung ist hängen geblieben, sodass sie immer noch funktioniert.


Was ist das? Ihre Antwort ist unklar.
Lacostenycoder

0

Eine andere Möglichkeit, die aktuellen Einstellungen des LaunchServices-URL-Handlers mit Xcode unter Apple OS X 10.10+ (Yosemite) aufzulisten:

open -a Xcode ~/Library/Preferences/com.apple.LaunchServices/com.apple.launchservices.secure.plist
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.