2009-01-23 33 views
23

estoy tratando de registrar un protocolo personalizado para una aplicación en la Mac, es decir:¿Cómo asignar un protocolo personalizado a una aplicación en la Mac?

  1. El usuario hace clic en el enlace con "abcdef: // alguna/url/aquí"
  2. Una instalado se pone en marcha la aplicación con la cadena por encima de pasado como primer parámetro

que he hecho esto con éxito en Windows utilizando la información de esta pregunta: ¿

how do I create my own URL protocol? (e.g. so://...)

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!

Respuesta

11

No he tenido ocasión de usarlo, pero hace un tiempo marqué OS X URL handler to open links to local files que es exactamente lo que está buscando.

La parte importante del procedimiento vinculado es agregar un CFBundleURLTypes apropiado al Info.plist de su aplicación, describiendo el esquema. El ejemplo dado no 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> 
+0

He visto esta solución en todas partes: ¿cuándo se registra realmente este controlador de protocolo? ¿El usuario tiene que ejecutar la aplicación por primera vez? – fatuhoku

+0

Sí, debe ejecutar la aplicación para registrar el controlador, y luego puede usarse de forma transparente (suponiendo que la aplicación oculta su icono de base). – iconoclast

+1

@iconoclast ya que la mayoría de las aplicaciones en OS X se instalan copiando, el archivo 'Info.plist' se registra en el momento de la copia (comúnmente en la carpeta'/Appplications/Foo'). En algunos casos, si los mimetypes o los esquemas de URL no se registran automáticamente, puede ser necesario [reiniciar] (http://apple.stackexchange.com/a/51416/147537). – tresf

3

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.

+0

Muchas gracias - esta es la sin -pensé una solución requerida para mí en 10.9.2. Trabajé como un regalo para abrir github-mac: // en Sourcetree (¡que solía funcionar para mí!) – ptim

5

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

Creo que con los servicios de lanzamiento se abrirá automáticamente esta aplicación si es la única que puede manejar un esquema de URL en particular, de lo contrario tendrá que utilizar 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.

15

En Mac esto es fácil de hacer con AppleScript. La descripción más detallada se encuentra en este artículo, Launch Scripts from Webpage Links on 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 

para después guardarlo 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.

<key>CFBundleURLTypes</key> 
<array> 
    <dict> 
     <key>CFBundleURLName</key> 
     <string>Cliff's handler</string> 
     <key>CFBundleURLSchemes</key> 
     <array> 
      <string>abcdef</string> 
     </array> 
    </dict> 
</array> 
+2

Esto no funciona para mí en 10.8.2. Puedo agregar [MissingLink] (http://www.occupantunknown.com/missinglink/missinglink.html) usando después de asociar el esquema con la aplicación usando algo como [Más Internet para Mac] (http: // download. cnet.com/More-Internet/3000-2094_4-10559064.html). Pero no puedo hacer que funcione con el AppleScript simple anterior. Si ejecuto '' 'open local: test''' dice' ''/Users/username/local:/test does not'''. – studgeek

+0

De acuerdo, este fue un gran consejo. Parece que lo tengo funcionando. Me encontré con el mismo problema exacto con "does not exists" Pero después de mover todo el archivo .app a otro directorio, parece que el sistema operativo lo recogió. – counterbeing

+3

¿Cuándo el sistema operativo realmente registra esto? – fatuhoku

3

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

cerveza instalar Duti

Se necesitan dos cosas.En primer lugar los identificadores de paquete de las aplicaciones que desea asociar:

mdls -nombre kMDItemCFBundleIdentifier /Applications/MacVim.app

En segundo lugar la UTI del tipo de archivo, Apple provides a list, pero también se puede explorar la soportados IU por su aplicación como esta:

mdls -nombre kMDItemContentTypeTree /Applications/MacVim.app

Ahora crea un archivo de texto en algún lugar de su sistema donde se asocian los identificadores de paquete con infección del tracto urinario:

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

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

En ese archivo que he seguimiento de todos mis preferencias de aplicaciones y reproducir inmediatamente después de una nueva instalación completa o para obtener una cuenta en otro Mac sólo corriendo:

duti ~/.default-apps.duti 
Cuestiones relacionadas