¿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:
- El usuario hace clic en el enlace con "abcdef://some / url / here"
- 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!
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>
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>
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.
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
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.
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