Cuando la ventana de información de Finder se utiliza para asociar archivos de un tipo particular con una aplicación:
Cuando Terminal se usa para hacer una adición comparable a~/Library/Preferences/com.apple.LaunchServices.plist
¿Por qué Launch Services no respeta inmediatamente una escritura en el correo electrónico del usuario com.apple.LaunchServices.plist
?
Una respuesta ideal podría ser una referencia a una página en el área de desarrolladores de Apple.
Las respuestas no necesitan implicar la ejecución de un comando.
Preguntándome si un demonio o agente hace efectivos los cambios en ese .plist, ejecuté:
sudo launchctl list
En la lista, bajo el encabezado de la etiqueta , no veo nada que pueda relacionarse con Servicios de lanzamiento .
Una respuesta a la pregunta de desbordamiento de pila ¿ Cómo configurar la aplicación predeterminada para tipos de archivos específicos en Mac OS X? sugiere:
… para ser recargado. Puede cerrar la sesión, esperar unos minutos o forzar el reinicio de los servicios de lanzamiento...
En mi caso:
lsregister
enfoque, pero ese tipo de escaneo requiere mucho tiempo.La respuesta aceptada a la pregunta de superusuario ¿Existe una forma más rápida de cambiar las aplicaciones predeterminadas asociadas con los tipos de archivos en OS X? sugiere:
… reiniciar el sistema operativo para aplicar los cambios (cerrar la sesión y volver a iniciarla no es suficiente) …
— si un reinicio es suficiente, probablemente consuma menos tiempo que matar y luego sembrar la base de datos de Launch Services.
De la Guía de programación de servicios de lanzamiento de Apple (todo el énfasis es mío):
Todas las aplicaciones disponibles en el sistema del usuario deben registrarse para darlas a conocer a Launch Services y copiar su enlace de documentos y otra información en su base de datos. Por lo general, no es necesario realizar esta tarea explícitamente, ya que una variedad de utilidades y servicios integrados en el software del sistema Mac OS X se encargan de ello automáticamente:
- Una herramienta de fondo incorporada, que se ejecuta cada vez que se inicia el sistema o un nuevo usuario inicia sesión , busca automáticamente las carpetas de aplicaciones en el sistema, la red, los dominios locales y de usuario y registra cualquier aplicación nueva que encuentre allí. (Esta operación es análoga a "reconstruir el escritorio" en versiones anteriores de Mac OS).
- El Finder registra automáticamente todas las aplicaciones a medida que las detecta , como cuando se arrastran al disco del usuario o cuando el usuario navega a una carpeta que las contiene.
- Cuando el usuario intenta abrir un documento para el que no se puede encontrar una aplicación preferida en la base de datos de Launch Services, el Finder presenta un cuadro de diálogo que le pide al usuario que seleccione una aplicación con la que abrir el documento. Luego registra esa aplicación antes de ejecutarla.
A pesar de estas utilidades de registro automático, a veces puede ser necesario registrar una aplicación explícitamente con los Servicios de lanzamiento. Por ejemplo, aunque se alienta a los desarrolladores a empaquetar sus aplicaciones para que puedan instalarse simplemente arrastrándolas al disco del usuario, algunas aplicaciones pueden requerir un software de instalación personalizado más elaborado. En tales casos, el instalador debe llamar a una de las funciones de registro de Launch Services
LSRegisterFSRef
oLSRegisterURL
registrar la aplicación explícitamente.
Tenga en cuenta las llamadas a la API que necesita el único procedimiento de registro manual con nombre ( me temo que la fuente no está disponible en opensource.apple.com ).
Mientras solucionaba un error en el procesamiento de Launch Services en Leopard con FileVault habilitado , noté que ~/Library/Preferences/com.apple.LaunchServices.plist
es:
procesado solo al iniciar sesión después del arranque, como datos de entrada para la creación de la base de datos de Launch Services propiamente dicha (Leopard habilitado para FileVault a menudo fallaba en realizar este paso, lo que resultaba en configuraciones de usuario aparentemente perdidas); y
en caché siempre que la máquina no se reinicie.
En pocas palabras, es la capa de persistencia del dominio de usuario de Launch Services , y las modificaciones a esa capa de persistencia solo se reconocen en el siguiente procesamiento: reinicio o reinicio .
com.apple.LaunchServices.plist
y reiniciar, consulte duti : es lo que solía eludir exactamente el mismo problema en GoodCompany .txt
extensión que se usa duti
en mi sistema (Lion, no FileVault).duti
pueda haber una respuesta adicional a esta pregunta, o una edición de la respuesta aceptada.duti
es básicamente un contenedor CLI alrededor de las funciones LSSetDefaultRoleHandlerForContentType
y LSSetDefaultHandlerForURLScheme
, que se declaran Application.h
junto con las LSRegister*
funciones, lo que significa que interactúa con los Servicios de lanzamiento en el nivel de API que proporciona Apple, no a través de la capa de persistencia (consulte la fuente duti, específicamente el controlador. c ).
Lrí
lsregister -kill -seed
no tarda tanto (unos segundos en mi Air), pero hace que OS X vuelva a mostrar las advertencias sobre la apertura de aplicaciones por primera vez. Es por eso que reiniciar generalmente es una forma menos molesta de aplicar los cambios.