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


Estoy tratando de registrar un protocolo personalizado para una aplicación en el 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 el primer parámetro

He hecho esto con éxito en Windows usando la información de esta pregunta:

¿Cómo puedo crear mi propio protocolo de URL? (por ejemplo, so://...)

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

Gracias!

Author: Community, 2009-01-23

5 answers

No he tenido ocasión de usarlo, pero hace algún tiempo me marcó Manejador de URL de OS X para abrir enlaces a archivos locales que es exactamente lo que estás buscando.

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

<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleURLName</key>
        <string>Local File</string>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>local</string>
        </array>
    </dict>
</array>
 12
Author: Jay,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-08-17 20:38:36

En Mac esto es fácil de hacer con AppleScript. La descripción más detallada se encuentra en este artículo, Inicie 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, se 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árdelo como una Aplicación. Luego, en el Finder, use Mostrar contenido del paquete para editar la información.plist. Agrega algunas propiedades a la aplicación para registrarla como controlador para tu protocolo.

<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleURLName</key>
        <string>Cliff's handler</string>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>abcdef</string>
        </array>
    </dict>
</array>
 16
Author: Turadg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-09-13 21:02:14

La parte importante de la página enlazada en la respuesta de Jay es la entrada en la Información.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 tendrá que usar el truco que describe Charlie Martin.

No estoy seguro de cuál es el comando por defecto que necesita ser ejecutado, o si es un comando launchctl.

 5
Author: Matthew Schinckel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-01-23 02:33:41

A partir de hoy, la mejor manera que he encontrado para resolver este problema en un Mac con la menor sobrecarga es utilizando la línea de comandos duti que me permite definir en un archivo de texto muy simple todas mis asociaciones:

Instalación de cerveza duti

Necesitarás dos cosas. Los 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 un enumere , pero también puede explorar la UTI compatible con su aplicación de la siguiente manera:

Mdls-name kMDItemContentTypeTree /Applications/MacVim.app

Ahora cree un archivo de texto en algún lugar de su sistema donde asocie los id de paquete 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

Observe que puedo asociar un controlador de URL como txmt y también tipos de archivos como Ruby scripts.

En ese archivo que realizar un seguimiento de todas mis preferencias de la aplicación y reproducirlos inmediatamente después de una instalación nueva completa o al obtener una cuenta en otro Mac que se acaba de ejecutar:

duti ~/.default-apps.duti
 5
Author: SystematicFrank,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-09-02 11:40:43

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, seguiré cavando.

 3
Author: Charlie Martin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-01-23 02:04:19