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).

¿Fue útil?

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 ++.

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top