¿Cómo configuro los controladores de URL personalizados en OS X?

64

He estado leyendo mucho en línea sobre manejadores de URL personalizados / manejadores de protocolos personalizados como:

Entiendo que puede decirle al sistema que un programa en particular puede manejar un cierto esquema / protocolo con el Info.plistarchivo:

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

Pero si hay varias aplicaciones que son capaces de abrir el mismo controlador de URL, por ejemplo, mailto:¿cómo especifica cuál quiere que use el sistema?

Hubo algunas referencias a utilidades como la More Internet preference paneque ya no parece estar disponible en el sitio del autor. Google lo encontré en línea, pero parece un poco inestable, como si estuviera escrito para un OSX anterior, tal vez Tiger.

No he podido encontrar información sobre cómo configurar el controlador de URL para protocolos y protocolos personalizados. Supongo que hay un plistarchivo en algún lugar que puedo editar, ¿o tal vez hay una utilidad más nueva y mejor que funciona bien con Mountain Lion?

cwd
fuente

Respuestas:

55

El archivo que busca es ~/Library/Preferences/com.apple.LaunchServices/com.apple.launchservices.secure.plist.

Contiene una matriz llamada LSHandlers, y los hijos del Diccionario que definen un LSHandlerURLSchemese pueden modificar en consecuencia con el LSHandlerRole.

En lugar de editar manualmente este archivo, también puede usar RCDefaultApp , que le brinda un buen Panel de preferencias. Se dice que no funciona para macOS 10.12 y posteriores, pero puedo confirmar que se ejecuta en macOS 10.14.

Una alternativa es SwiftDefaultApps .

Por ejemplo, aquí están SVN y SSH:

... y en RCDefaultApp:

slhck
fuente
35
4 minutos 19 segundos? ¿Seriamente?
Daniel Beck
2
Gracias por la respuesta rápida y detallada. ¡Se ve bien! Pregunta sin embargo: creo que probé RCDefaultApp antes y tuve algún problema con él. ¿Te ha funcionado a la perfección?
cwd
@cwd Sinceramente, tengo que decir que no lo uso a menudo. Más para capturas de pantalla para Superusuario que cualquier otra cosa :) Cada vez que necesito cambiar las asociaciones de archivos, lo hago a través del cuadro de diálogo Obtener información ... en Finder. Nunca necesité cambiar el protocolo y los controladores MIME. Pero me pareció lo suficientemente estable.
slhck
Esto parece ser para abrir una "aplicación" real. ¿Qué sucede si quiero hacer un procesamiento personalizado, usando un comando de terminal, etc.?
nute
1
@nute Solo desde lo alto de mi cabeza, no estoy seguro. ¿Quizás una aplicación creada con Automator que envuelve un script de shell?
slhck
14

Actualización de julio de 2017: RCDefaultApp y lstoolya no funciona en macOS 10.12 o posterior. Tendremos que encontrar una nueva solución.

Editar Mar 2018
Encontré SwiftDefaultApps pero no puedo probar ya que todavía no estoy en High Sierra.


Continuando con la respuesta anterior, si desea hacer esto en la línea de comando, puede usar el lstoolcomando, que es el núcleo de RCDefaultApp, que se encuentra en RCDefaultApp.prefPane/Contents/Resources/lstool.

Su uso es sencillo:

[~]$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 Commandado
fuente
2
Encontré un posible reemplazo para RCDefaultApp en github.com/Lord-Kamina/SwiftDefaultApps, aunque tendrá que construirlo usted mismo con Xcode.
luckman212
Estoy usando la versión 2.1 de RCDefaultApp y funciona bien para mí en 10.12. Al menos todavía se enumeran todos los elementos. ¿O solo alguna operación específica ya no funciona? Por favor explique
SuperTempel
@SuperTempel La lstoolherramienta de línea de comandos muestra este error cuando intenta ejecutarlo: objc[1049]: Objective-C garbage collection is no longer supported.( lstooles el programa interno utilizado por el panel de preferencias RCDefaultApp. Si bien el panel de preferencias parece funcionar, no creo que pueda hacer nada porque lstoolestá roto. )
Quinn Comendant
SwiftDefaultApps aparentemente no funciona en procesadores Intel. Sin solución hasta al menos abril de 2018.
Quinn Comendant
3
Soy el desarrollador de SwiftDefaultApps, SWDA fue codificado desde el principio con macOS Sierra y superior en mente (de hecho, comencé a trabajar en él después de mucha frustración al leer esta pregunta y otras similares). No funcionaba en 10.13 en gran parte debido a un error en Swift o en macOS, pero parece haberse solucionado con la actualización a 10.13.4 / Swift 4.1.
Gregorio Litenstein
11

Listado de la configuración actual del controlador de URL LaunchServices en Apple OS X 10.10 (Yosemite):

defaults read com.apple.LaunchServices/com.apple.launchservices.secure
VirtualJMills
fuente
Yay por usar las herramientas integradas que no se rompen o requieren que descargues algo.
xdhmoore
Sin embargo, esto no enumera todos los valores predeterminados para cada protocolo, solo algunos.
Vadim Peretokin
5

De hecho, escribí una aplicación que simplifica el registro de protocolos de URL personalizados, si alguien está interesado. Se llama LinCastor ( http://onflapp.wordpress.com/lincastor/ ). Los controladores se pueden definir como AppleScript o script de shell (que puede ser perl, python o lo que sea).

En Flapp
fuente
Muy buena idea, pero me temo que no puedo hacer que el script de ejemplo proporcionado funcione. Más en su blog, esperando moderación: getitdoneapps.wordpress.com/lincastor-browser/support/…
Flash Sheridan
Eso parecía ser una extraña rareza de salto de línea en el archivo de ejemplo, diagnosticada ejecutando el script desde la línea de comando. ("/ Bin / sh: mal intérprete: operación no permitida") Guardar el problema en BBEdit, y cambiar y recargar los saltos de línea a / desde Windows, resolvió el problema.
Flash Sheridan
5

Abrir el archivo con XCode funciona bastante fácil.

Usar el comando build in plutilcomo se describe en la respuesta en https://discussions.apple.com/thread/5815759 para convertir entre formato xml1 o binary1 funciona de manera similar.

plutil -convert xml1 /file-i-wish

nano /file-i-wish & save file 

plutil -convert binary1 /file-i-wish

No hay necesidad de herramientas 'alienígenas' :-)

Clemens Tolboom
fuente
4

También puedes usar duti :

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

Acabo de probar el viejo More Internet, bajo El Capitán.

Es funky y la única forma en que funciona es mediante el uso de las teclas de flecha hacia arriba y hacia abajo para seleccionar el protocolo, y arrastrar / soltar el icono de la aplicación en la ventana para realizar un cambio.

Cambié el valor predeterminado de Safari a Chrome, y el cambio se atascó, por lo que aún funciona.

Calgary Guru
fuente
¿Que es esto? Tu respuesta no está clara.
lacostenycoder
0

Otra forma de enumerar la configuración actual del controlador de URL de LaunchServices con Xcode en Apple OS X 10.10+ (Yosemite):

open -a Xcode ~/Library/Preferences/com.apple.LaunchServices/com.apple.launchservices.secure.plist
oikonomopo
fuente