¿Cómo asociar el tipo de archivo con la aplicación MacOS X sin iniciarlo primero?
-
10-07-2019 - |
Pregunta
Me gustaría asociar la versión instalada por última vez de mi aplicación Mac OS X con un cierto tipo de archivo. Un poco de experimentación muestra que el archivo info.plist parece ser leído e interpretado por el sistema operativo al iniciar la aplicación, no al arrastrar el paquete de la aplicación al disco. Documentación de Apple en tiempo de ejecución configuración no dice mucho sobre ese tema.
¿Hay alguna manera, usando una simple imagen .dmg
como medio de instalación, para asegurarse de que el sistema asocie ese tipo de archivo en particular con mi aplicación recién instalada sin tener que iniciarla primero?
Debo aclarar que quiero que esto se haga automáticamente durante la instalación (no quiero que mis usuarios tengan que hacerlo ellos mismos).
Solución
Cuando un usuario arrastra una aplicación a la carpeta Aplicaciones, el sistema debe registrarla en Launch Services automáticamente. Ver Registro de la aplicación en la Guía de servicios de lanzamiento.
Otros consejos
Puede hacerlo escribiendo apple-I en el archivo con el que desea asociar la aplicación, use la pequeña casilla llamada "Abrir con ..." y selecciona tu aplicación. Puede marcar la pequeña casilla debajo de "Cambiar todo ..." para hacer el cambio para todos los archivos similares.
Aunque la información de Tony es correcta, también se explica aquí - (que arrastra el MyApp.app
a Aplicaciones
se registrará en Launch Services automáticamente utilizando la información del archivo xcode Info.plist
y las asociaciones de archivos de configuración), no responde completamente la pregunta sobre la asociación de archivos.
Si las personas siguen estas instrucciones, tendrán su aplicación abierta, pero ningún archivo específico abierto.
[...] asegúrese de que el sistema asocie ese tipo de archivo en particular con mi aplicación recién instalada
La asociación de archivos es un poco diferente en Mac que en otras plataformas. La mayoría de las plataformas, cuando * .foo
se registra con myapp
, cuando se hace doble clic en MyFile.foo
, se distribuye algo como:
/path/to/myapp MyFile.foo
Y aunque es libre de utilizar esta técnica en la línea de comandos en una Mac con éxito, simplemente no funcionará a través del Finder y tampoco funcionará haciendo doble clic en el archivo asociado en el escritorio.
Preguntado y respondido aquí:
https://stackoverflow.com/a/19702342/3196753
Algunos afirman que este enfoque es ventajoso sobre el manejo conservador de documentos abiertos de archivos en main ()
porque solo abre una instancia de la aplicación. Independientemente del razonamiento detrás de esta decisión, complica aún más las cosas desde una perspectiva de C ++.
- El PDF de 108 páginas disponible aquí (advertencia, esto está marcado como " heredado " ;, puede ocurrir linkrot).
- Documentación relevante del portal de desarrolladores de Apple disponible .
- El enfoque de Qt está documentado aquí .
De qt.io:
Cuando un usuario hace doble clic en un archivo en el Finder, Finder envía un evento de Apple a la aplicación asociada con el archivo y le pide que abra el archivo. Si la aplicación no se está ejecutando, se inicia y luego se realiza la solicitud. La ventaja de este enfoque es que solo se está ejecutando una instancia de la aplicación.
En Windows, esto generalmente se hace iniciando la aplicación y pasando el nombre del archivo como argumento de línea de comando. Mirar muchos archivos resulta en el lanzamiento de muchas instancias de la misma aplicación. (El componente QtSingleApplication, disponible como una solución Qt, soluciona este problema).
Qt 3 no proporciona una abstracción para manejar eventos de Apple, pero es sencillo agregar soporte para ellos en su aplicación utilizando la API de carbono de Mac. Supongamos que tenemos una aplicación llamada XpmViewer que muestra archivos XPM (un formato de imagen X11). La declaración de la clase de ventana principal sigue: [fragmento de código eliminado]
(BOOL)application:(NSApplication *)theApplication
openFile:(NSString *)filename
Manejo del evento de apertura del archivo Mac OS X ANTES de que C ++ main () se ejecute No se llama al controlador AEInstallEventHandler en el inicio