¿Cómo asignar un protocolo personalizado a una aplicación en la Mac?

Intento registrar un protocolo personalizado para una aplicación en la Mac, es decir:

  1. El usuario hace clic en el enlace con “abcdef: // some / url / here”
  2. Se inicia una aplicación instalada con la cadena anterior pasada como primer param

Lo he hecho con éxito en Windows usando la información de esta pregunta:

¿Cómo creo mi propio protocolo de URL? (por ejemplo, así: // …)

Preferiría encontrar algo que sea independiente del navegador, en otras palabras, en el nivel del sistema operativo. También me gustaría automatizar este registro a través de un script de shell, así que espero que haya una forma de hacerlo que no involucre la GUI.

¡Gracias!

No he tenido ocasión de usarlo, pero hace un tiempo marqué como favorito el manejador de URL OS X para abrir enlaces a archivos locales, que es exactamente lo que está buscando.

La parte importante del procedimiento vinculado es agregar un CFBundleURLTypes apropiado a CFBundleURLTypes de su aplicación, describiendo el esquema. El ejemplo dado allí se ve así:

 CFBundleURLTypes   CFBundleURLName Local File CFBundleURLSchemes  local    

En Mac esto es fácil de hacer con AppleScript. La descripción más detallada se encuentra en este artículo, Lanzar scripts desde enlaces de páginas web en Mac . Había leído esa página, ya que incluye un recorrido completo y un ejemplo de trabajo completo para descargar.

Básicamente, usted crea un controlador de eventos en un script:

 on open location this_URL display dialog "I'm doing something with this URL: " & return & this_URL end open location 

Luego guárdalo como una aplicación. Luego, en el Finder use Mostrar contenido del paquete para editar Info.plist. Agregue algunas propiedades a la aplicación para registrarla como un controlador para su protocolo.

 CFBundleURLTypes   CFBundleURLName Cliff's handler CFBundleURLSchemes  abcdef    

La parte importante de la página enlazada en la respuesta de Jay es la entrada en Info.plist.

Creo que con Launch Services abrirá automáticamente esta aplicación si es la única que puede manejar un esquema de URL en particular, de lo contrario necesitarás usar el truco que Charlie Martin describe.

No estoy seguro de cuál es el comando predeterminado que se debe ejecutar, o si se trata de un comando launchctl.

Desenterrar los detalles es difícil, pero hay un panel de preferencias llamado RCDefaultApp que lo manejará por usted. Todavía me encantaría saber cómo funciona, continuaré cavando.

A partir de hoy, la mejor manera que encontré para resolver este problema en una Mac con la menor sobrecarga es usando la línea de comando duti que me permite definir en un archivo de texto muy simple todas mis asociaciones:

brew instalar duti

Necesitarás dos cosas. Primeros ID de paquete de las aplicaciones que desea asociar:

mdls -name kMDItemCFBundleIdentifier /Applications/MacVim.app

En segundo lugar, la UTI del tipo de archivo, Apple proporciona una lista , pero también puede explorar la UTI compatible con su aplicación de esta manera:

mdls -name kMDItemContentTypeTree /Applications/MacVim.app

Ahora crea un archivo de texto en algún lugar de tu sistema donde asocies identificadores de paquetes con UTI:

 # ~/.default-apps.duti # # bundle id UTI role com.apple.Safari public.html all org.vim.MacVim txmt org.vim.MacVim public.ruby-script 

Tenga en cuenta que puedo asociar un manejador de URL como txmt y también tipos de archivos como los scripts de Ruby.

En ese archivo, hago un seguimiento de todas las preferencias de mi aplicación y las reproduzco inmediatamente después de una nueva instalación completa o al obtener una cuenta en otra Mac que acaba de ejecutar:

 duti ~/.default-apps.duti