2009-03-10 11 views
24

He creado una utilidad de línea de comandos (herramienta Foundation) en Xcode, usando Cocoa. La herramienta hace uso de un marco de terceros.Uso de marcos en una herramienta de línea de comandos

Todo funciona bien en Xcode, pero ¿cómo implemento este programa?

Si ejecuto la aplicación desde el Finder, no puede encontrar la biblioteca porque está buscando en ../Frameworks/etc. ¿Puedo vincular estáticamente en el marco de terceros?

+0

Compruebe la respuesta a una pregunta similar aquí -> http://stackoverflow.com/a/19230699/986 –

Respuesta

20

Desafortunadamente, no hay forma de agrupar un marco con una utilidad de línea de comandos en OS X y sospecho que el marco al que se está enlazando espera integrarse en el directorio de Frameworks/del paquete de aplicaciones. Si tiene acceso al código fuente de la infraestructura, puede compilar una biblioteca estática y vincularla estáticamente a su aplicación (o incluir directamente la fuente en el destino de la aplicación). Si usted no tiene el código fuente o no desea vincular estáticamente la biblioteca, por alguna razón, hay dos opciones restantes:

  1. Si usted tiene acceso a los/Library/Frameworks de todo el sistema carpeta, puede instalar el marco de terceros allí. Esto requiere que la Ruta de instalación de la infraestructura (la configuración de compilación INSTALL_PATH) se establezca en /Library/Frameworks en tiempo de compilación o que use install_name_tool para cambiar la ruta de instalación de marcos a /Library/Frameworks (si no tiene el código fuente de la infraestructura).

  2. Cree un paquete de aplicaciones (como si estuviera construyendo una aplicación GUI) con su utilidad de línea de comandos como el ejecutable del conjunto de aplicaciones (es decir, en AppBundle.app/Contents/MacOS/). A continuación, puede copiar el marco de terceros en el directorio de marcos del paquete de aplicaciones. A continuación, puede colocar el paquete de aplicaciones en el lugar que desee y crear un enlace simbólico a la utilidad de línea de comandos.

La opción 1 es definitivamente el enfoque más aceptado, pero he usado la opción 2 cuando había una razón válida.

Puede encontrar más información sobre la construcción, el enlace y la instalación de marcos en el Frameworks Programming Guide de Apple.

+0

# 2 es definitivamente un enfoque no tradicional, que siempre me gusta ver ... Me pregunto sin embargo - tal vez haya una forma de usar la herramienta de nombre de instalación INSTALL_NAME_TOOL para hacer esto también? ¿Qué piensas? –

+0

¿Alguien podría explicar cómo instalar un proyecto de marco en/Library/Frameworks? En mi caso, espero instalar GRDB.swift para usar en otro proyecto. – kjb

+0

Esto es relevante de nuevo porque Swift actualmente requiere herramientas de línea de comandos para acceder a la Biblioteca estándar Swift en un marco, en alguna parte. kjb, su instalador debería poder agregar a/Library/Frameworks. – balthisar

8

Otra forma, si tiene el código fuente para el marco, es agregar un objetivo de biblioteca estática y crear una lib estática de él. Luego puede vincularlo estáticamente a su herramienta de línea de comandos.

+0

¡salud, amigo! static linked defo el camino a seguir! – Stoff81

+4

Swift no es compatible con bibliotecas estáticas :( – iksnae

Cuestiones relacionadas