Come configuro i gestori URL personalizzati su OS X?


64

Ho letto molto online sui gestori di URL personalizzati / gestori di protocolli personalizzati come:

Capisco che puoi dire al sistema che un determinato programma è in grado di gestire un determinato schema / protocollo con il Info.plistfile:

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

Ma se ci sono più applicazioni in grado di aprire lo stesso gestore URL, come ad esempio mailto:come specificare quale si desidera che il sistema utilizzi?

C'erano alcuni riferimenti a programmi di utilità come quello More Internet preference paneche non sembra più essere disponibile dal sito dell'autore. L'ho trovato online da Google, ma sembra un po 'traballante - come se fosse stato scritto per un vecchio OSX - forse Tiger.

Non sono stato in grado di trovare informazioni su come impostare il gestore URL per protocolli e protocolli personalizzati. Suppongo che ci sia un plistfile da qualche parte che posso modificare - o forse c'è un'utilità più recente e migliore che funziona bene con Mountain Lion?

Risposte:


55

Il file che cerchi è ~/Library/Preferences/com.apple.LaunchServices/com.apple.launchservices.secure.plist.

Contiene un array chiamato LSHandlerse i figli del dizionario che definiscono un LSHandlerURLSchemepossono essere modificati di conseguenza con LSHandlerRole.

Invece di modificare manualmente questo file, puoi anche usare RCDefaultApp , che ti dà un bel riquadro delle preferenze. Si dice che non funzioni per macOS 10.12 e versioni successive, ma posso confermare che funziona con macOS 10.14.

Un'alternativa è SwiftDefaultApps .

Ad esempio, ecco SVN e SSH:

... e in RCDefaultApp:


35
4 minuti 19 secondi? Sul serio?
Daniel Beck

2
Grazie per la risposta rapida e dettagliata. Sembra buono! Domanda però: penso di aver provato RCDefaultApp prima e ho avuto qualche problema con esso. Ha funzionato perfettamente per te?
Cwd

@cwd Onestamente devo dire che non lo uso spesso. Più per gli screenshot per Super User che per qualsiasi altra cosa :) Ogni volta che devo cambiare le associazioni dei file, lo faccio tramite la finestra di dialogo Ottieni informazioni ... nel Finder. Non ho mai avuto bisogno di cambiare protocollo e gestori MIME. Ma mi è sembrato abbastanza stabile.
slhck,

Questo sembra aprire una vera "app". Cosa succede se desidero eseguire un'elaborazione personalizzata, utilizzando un comando terminale, ecc.?
nute il

1
@nute Proprio dalla cima della mia testa, non sono sicuro. Forse un'app creata con Automator che avvolge uno script di shell?
slhck,

14

Aggiornamento luglio 2017: RCDefaultApp e lstoolnon funziona più su macOS 10.12 o successivo. Dovremo trovare una nuova soluzione.

Modifica marzo 2018
Ho trovato SwiftDefaultApps ma non riesco a testare perché non sono ancora su High Sierra.


Promuovendo la risposta precedente, se si desidera farlo sulla riga di comando, è possibile utilizzare il lstoolcomando, che è il nucleo di RCDefaultApp, che si trova sotto RCDefaultApp.prefPane/Contents/Resources/lstool.

Il suo utilizzo è semplice:

[~]$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
Ho trovato un possibile sostituto di RCDefaultApp su github.com/Lord-Kamina/SwiftDefaultApps anche se dovrai costruirlo tu stesso con Xcode.
luckman212

Sto usando la versione 2.1 di RCDefaultApp e funziona perfettamente per me il 10.12. Almeno è ancora elenca tutti gli elementi. O solo alcune operazioni specifiche non funzionano più? Si prega di elaborare
SuperTempel il

@SuperTempel Lo lstoolstrumento da riga di comando visualizza questo errore quando si tenta di eseguirlo: objc[1049]: Objective-C garbage collection is no longer supported.( lstoolè il programma interno utilizzato dal riquadro delle preferenze di RCDefaultApp. Mentre il riquadro delle preferenze sembra funzionare, non penso che possa fare nulla perché lstoolè rotto. )
Quinn Comendant il

Sembra che SwiftDefaultApps non funzioni sui processori Intel. Nessuna correzione almeno fino ad aprile 2018.
Quinn Comendant,

3
Sono lo sviluppatore di SwiftDefaultApps, SWDA è stato codificato sin dall'inizio con macOS Sierra e in mente (in effetti, ho iniziato a lavorarci dopo molta frustrazione leggendo questa domanda e simili). Non funzionava in 10.13 in gran parte a causa di un bug in Swift o macOS stesso, ma sembra essere stato corretto con l'aggiornamento a 10.13.4 / Swift 4.1.
Gregorio Litenstein,

11

Elenco delle impostazioni correnti del gestore URL LaunchServices su Apple OS X 10.10 (Yosemite):

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

Sì, per usare gli strumenti integrati che non si rompono o non richiedono di scaricare qualcosa.
xdhmoore,

Questo non elenca tutti i valori predefiniti per ogni protocollo, solo alcuni.
Vadim Peretokin,

5

In realtà ho scritto un'applicazione che semplifica la registrazione dei protocolli URL personalizzati, se qualcuno è interessato. Si chiama LinCastor ( http://onflapp.wordpress.com/lincastor/ ). I gestori possono essere definiti come AppleScript o script di shell (che può essere perl, python o qualsiasi altra cosa).


Ottima idea, ma temo di non riuscire a far funzionare lo script di esempio fornito. Altro sul tuo blog, in attesa di moderazione: getitdoneapps.wordpress.com/lincastor-browser/support/…
Flash Sheridan,

Sembrava una strana sconcertante stranezza nel file di esempio, diagnosticata eseguendo lo script dalla riga di comando. (“/ Bin / sh: interprete errato: operazione non consentita”) Il salvataggio di una copia in BBEdit e la modifica e la ricarica delle interruzioni di linea da / verso Windows hanno risolto il problema.
Flash Sheridan,

5

Aprire il file con XCode funziona abbastanza facilmente.

L'uso del comando build in plutilcome descritto nella risposta su https://discussions.apple.com/thread/5815759 per la conversione tra il formato xml1 o binary1 funziona in modo simile.

plutil -convert xml1 /file-i-wish

nano /file-i-wish & save file 

plutil -convert binary1 /file-i-wish

Non sono necessari strumenti "alieni" :-)


4

Puoi anche usare duti :

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

0

Ho appena provato il vecchio More Internet, sotto El Capitan.

È funky e l'unico modo in cui funziona è tramite i tasti freccia su e giù per selezionare il protocollo e un trascinamento dell'icona APP nella finestra per apportare una modifica.

Ho cambiato l'impostazione predefinita da Safari a Chrome e la modifica è rimasta bloccata, quindi funziona ancora.


Cos'è questo? La tua risposta non è chiara
lacostenycoder

0

Un altro modo per elencare le impostazioni correnti del gestore URL LaunchServices con Xcode su Apple OS X 10.10+ (Yosemite):

open -a Xcode ~/Library/Preferences/com.apple.LaunchServices/com.apple.launchservices.secure.plist
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.