Jak skonfigurować niestandardowe procedury obsługi adresów URL w systemie OS X?

64

Dużo czytałem online o niestandardowych modułach obsługi adresów URL / niestandardowych modułach obsługi protokołów, takich jak:

Rozumiem, że możesz powiedzieć systemowi, że określony program jest w stanie obsłużyć określony schemat / protokół za pomocą Info.plistpliku:

<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/>

Ale jeśli istnieje wiele aplikacji, które potrafią otworzyć ten sam moduł obsługi adresów URL, na przykład mailto:jak określić, z której chcesz korzystać w systemie?

Pojawiły się odniesienia do takich narzędzi, More Internet preference panektóre nie są już dostępne na stronie autora. Znalazłem go online przez Googling, ale wydaje się nieco niepewny - tak jak napisano dla starszego OSX - być może Tygrysa.

Nie udało mi się znaleźć informacji na temat ustawiania modułu obsługi adresów URL dla protokołów i protokołów niestandardowych. Zakładam, że jest plistgdzieś plik, który mogę edytować - a może istnieje nowsze, lepsze narzędzie, które działa dobrze z Mountain Lion?

cwd
źródło

Odpowiedzi:

55

Plik, którego szukasz, to ~/Library/Preferences/com.apple.LaunchServices/com.apple.launchservices.secure.plist.

Zawiera tablicę o nazwie LSHandlers, a elementy podrzędne Dictionary, które ją definiują, LSHandlerURLSchememożna odpowiednio modyfikować za pomocą LSHandlerRole.

Zamiast ręcznie edytować ten plik, możesz również użyć RCDefaultApp , co daje ładne okienko preferencji. Mówi się, że nie działa na macOS 10.12 i nowszych, ale mogę potwierdzić, że działa pod macOS 10.14.

Alternatywą jest SwiftDefaultApps .

Na przykład oto SVN i SSH:

… Oraz w RCDefaultApp:

slhck
źródło
35
4 minuty 19 sekund? Poważnie?
Daniel Beck
2
Dzięki za szybką i szczegółową odpowiedź. Wygląda dobrze! Pytanie jednak - myślę, że próbowałem RCDefaultApp wcześniej i miałem z tym jakiś problem. Czy działało to płynnie dla Ciebie?
cwd
@cwd Muszę szczerze powiedzieć, że nie używam go często. Więcej zrzutów ekranu dla Superużytkownika niż cokolwiek innego :) Ilekroć muszę zmienić skojarzenia plików, robię to przez okno dialogowe Uzyskaj informacje… w Finderze. Nigdy nie musiałem zmieniać procedur obsługi protokołu i MIME. Ale wydawało mi się to wystarczająco stabilne.
slhck,
To wydaje się być otwarcie prawdziwej „aplikacji”. Co jeśli chcę wykonać niestandardowe przetwarzanie, używając polecenia terminala itp.?
nute
1
@ nute Tylko z góry mojej głowy, nie jestem pewien. Być może aplikacja utworzona za pomocą Automatora, która otacza skrypt powłoki?
slhck,
14

Zaktualizuj lipiec 2017: RCDefaultApp i lstoolnie działa już w systemie macOS 10.12 lub nowszym. Musimy znaleźć nowe rozwiązanie.

Edytuj marzec 2018
Znalazłem SwiftDefaultApps, ale nie mogę przetestować, ponieważ nie jestem jeszcze w High Sierra.


Kontynuując poprzednią odpowiedź, jeśli chcesz to zrobić w wierszu poleceń, możesz użyć lstoolpolecenia, które jest rdzeniem RCDefaultApp, znajdującego się pod RCDefaultApp.prefPane/Contents/Resources/lstool.

Jego użycie jest proste:

[~]$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
Quinn Comendant
źródło
2
Znalazłem potencjalny zamiennik RCDefaultApp na github.com/Lord-Kamina/SwiftDefaultApps, chociaż będziesz musiał zbudować go sam z Xcode.
luckman212,
Używam wersji 2.1 RCDefaultApp i działa dobrze dla mnie 10.12. Przynajmniej nadal wyświetla wszystkie elementy. Czy tylko niektóre określone operacje już nie działają? Proszę rozwinąć
SuperTempel
@SuperTempel Narzędzie lstoolwiersza polecenia wyświetla ten błąd, gdy próbujesz go uruchomić: objc[1049]: Objective-C garbage collection is no longer supported.( lstoolto wewnętrzny program używany przez panel preferencji RCDefaultApp. Chociaż panel preferencji wydaje się działać, nie sądzę, aby mógł nic zrobić, ponieważ lstooljest zepsuty. )
Quinn Comendant
SwiftDefaultApps najwyraźniej nie działa na procesorach Intel. Bez poprawki do co najmniej kwietnia 2018 r.
Quinn Comendant
3
Jestem programistą SwiftDefaultApps, SWDA od samego początku był kodowany z macOS Sierra i na wyższym poziomie (w rzeczywistości zacząłem nad tym pracować po dużej frustracji czytając to pytanie i podobne). W wersji 10.13 nie działał głównie z powodu błędu w samym Swift lub w samym systemie macOS, ale wydaje się, że został naprawiony dzięki aktualizacji do 10.13.4 / Swift 4.1.
Gregorio Litenstein,
11

Wyświetlanie aktualnych ustawień modułu obsługi adresów URL LaunchServices w systemie Apple OS X 10.10 (Yosemite):

defaults read com.apple.LaunchServices/com.apple.launchservices.secure
VirtualJMills
źródło
Tak, za korzystanie z wbudowanych narzędzi, które nie psują się ani nie wymagają pobierania pliku.
xdhmoore
Nie wyświetla to jednak wszystkich wartości domyślnych dla każdego protokołu, tylko niektóre.
Vadim Peretokin
5

Napisałem aplikację, która upraszcza rejestrację niestandardowych protokołów URL, jeśli ktoś jest zainteresowany. Nazywa się LinCastor ( http://onflapp.wordpress.com/lincastor/ ). Programy obsługi można zdefiniować jako AppleScript lub skrypt powłoki (który może perl, python lub cokolwiek innego).

Na Flapp
źródło
Bardzo fajny pomysł, ale obawiam się, że nie mogę uruchomić dostarczonego przykładowego skryptu do działania. Więcej informacji na blogu w oczekiwaniu na moderację: getitdoneapps.wordpress.com/lincastor-browser/support/…
Flash Sheridan
Wydawało się to dziwnym dziwnym łamaniem linii w przykładowym pliku, diagnozowanym przez uruchomienie skryptu z linii poleceń. („/ Bin / sh: zły interpreter: Operacja niedozwolona”) Zapisanie kopii w BBEdit oraz zmiana i ponowne ładowanie podziałów linii do / z Windows rozwiązało problem.
Flash Sheridan,
5

Otwórz plik za pomocą XCode działa dość łatwo.

Korzystanie z polecenia wbudowanego plutilopisanego w odpowiedzi na https://discussions.apple.com/thread/5815759 w celu konwersji między formatem xml1 lub binarnym1 działa podobnie.

plutil -convert xml1 /file-i-wish

nano /file-i-wish & save file 

plutil -convert binary1 /file-i-wish

Nie potrzeba narzędzi „obcych” :-)

Clemens Tolboom
źródło
4

Możesz także użyć duti :

echo $'com.apple.mail mailto\ncom.googlecode.iterm2 x-man-page'>~/.duti;duti ~/.duti
Lri
źródło
0

Właśnie wypróbowałem stary More Internet pod El Capitan.

Jest funky i jedynym sposobem, w jaki działa, jest użycie klawiszy strzałek w górę i w dół, aby wybrać protokół, a także przeciągnięcie / upuszczenie ikony aplikacji w oknie, aby dokonać zmiany.

Zmieniłem domyślną z Safari na Chrome, a zmiana utknęła, więc nadal działa.

Calgary Guru
źródło
Co to jest? Twoja odpowiedź jest niejasna.
lacostenycoder
0

Inny sposób wyświetlania aktualnych ustawień modułu obsługi adresów URL LaunchServices z Xcode w Apple OS X 10.10+ (Yosemite):

open -a Xcode ~/Library/Preferences/com.apple.LaunchServices/com.apple.launchservices.secure.plist
oikonomopo
źródło