2010-02-09 8 views
9

Me gustaría crear una aplicación auxiliar que no tenga GUI pero que tenga acceso a un paquete de aplicaciones. Estaba mirando las plantillas de proyecto de la línea de comandos de Xcode, pero todas solo generan archivos ejecutables. ¿Cómo puedo crear algo así como una herramienta de línea de comando que no presente ningún menú de aplicación pero que brinde acceso a los recursos del paquete en un .app? ¿Estoy pensando en esto de la manera incorrecta?Paquete de aplicaciones GUI-less

Gracias.

Respuesta

11

Me gustaría crear una aplicación auxiliar que no tenga GUI pero que tenga ... un paquete de aplicaciones.

Eso se llama agente, y usted crea uno haciendo una aplicación normal y configurando su clave LSUIElement en la cadena "1".

16

La respuesta de Peter (use LSUIElement) es probablemente lo que está buscando. Ocasionalmente, he querido crear una aplicación de línea de comandos real que también tenga un paquete de aplicaciones. En caso de que otros encuentren el mismo escenario, esto es lo que he encontrado ...

El paquete de aplicaciones no es un archivo ejecutable. El verdadero ejecutable está enterrado en el interior: MyApp.app/Contents/MacOS/MyApp es el ejecutable Mach-O real para una aplicación llamada MyApp. Las plantillas Xcode estándar vinculan aplicaciones contra AppKit.framework y tienen un main.m que define la función main() para el ejecutable que inicia una instancia NSApplication. Sin embargo, puedes poner cualquier ejecutable en un paquete de aplicaciones, incluida una aplicación solo para consola. Simplemente reemplace la función main() en main.m en la plantilla de la aplicación con la función main() de su aplicación de consola y elimine AppKit.framework de los marcos vinculados de la aplicación.

Si lo desea, puede reemplazar main.m con un main.c que declara una función principal si desea evitar Objective-C por completo (aunque no hay nada necesariamente Objective-C específico en main.m si reemplaza el contenido de la función main()).

Para ejecutar su aplicación desde la consola, debe especificar el ejecutable real, no el paquete de la aplicación, por lo que tendría que escribir MyApp.app/Contents/MacOS/MyApp en la línea de comandos. Cuando he utilizado paquetes de aplicaciones para aplicaciones de consola (para proporcionar marcos enlazados, recursos, etc.), a menudo creo un enlace simbólico al ejecutable y coloco el enlace simbólico en/usr/local/bin (o en otro lugar en la ruta) durante instalación o primera ejecución.

+1

Todo es cierto, pero la respuesta de Peter puede estar más cerca de lo que el desarrollador está tratando de lograr. – Ken

+1

@Ken: De acuerdo. El asker probablemente esté buscando una aplicación LSUIElement. Sin embargo, he encontrado la ocasión de tener una aplicación solo para consola que usa un paquete de aplicaciones. En caso de que sea útil para otros, dejaré esta respuesta. –

+0

Esta fue una respuesta útil también, Barry, así que gracias. Sin embargo, la entrada de LSUIElement en Info.plist lo hace realmente simple. Gracias de nuevo. –

Cuestiones relacionadas