2009-10-25 10 views
21

Soy un principiante de XCode. Estoy tratando de seguir these instructions. Claramente, me falta algo porque aunque puedo ver que el marco que quiero se ha copiado en el paquete de la aplicación, no puedo hacer referencia a él.Bundle framework con aplicación en XCode

Cuando comienzo a la aplicación de una máquina que no sea la mía (o si quito OpenCV de/Library/Frameworks /) me sale el siguiente error:

Dyld Error Message: Library not loaded: /Users/david/Library/Frameworks/OpenCV.framework/Versions/A/OpenCV Referenced from: /Users/g/Demo/Slates/ClipSplitter/build/Release/ClipSplitter.app/Contents/MacOS/ClipSplitter Reason: image not found

No hay un usuario "David" en mi sistema si eso hace alguna diferencia. También se trata de un OpenCV precompilado descargado de Internet. (Here’s a screenshot of the project como se solicita en los comentarios.)

+0

¿Dónde se encuentra dentro del paquete de la aplicación? –

+0

Contenidos/Frameworks/OpenCV.framework –

+0

Diría publicar una captura de pantalla de su ventana de proyecto con el objetivo relevante completamente expandido. –

Respuesta

29

Cuando se ha construido el OpenCV.framework, se ha configurado para usar una ruta de instalación de /Users/david/Library/Frameworks/.

Dado que desea utilizar la biblioteca como un marco privado (instalado en el contenedor de aplicaciones en ClipSplitter.app/Contents/Frameworks/OpenCV.framework) tiene que cambiar su ruta de instalación. Esto se puede hacer fácilmente mediante el terminal de la siguiente manera:

$ install_name_tool -id @executable_path/../Frameworks/OpenCV.framework/OpenCV <your_path>/OpenCV.framework/OpenCV 

Por supuesto, usted tiene que ajustar el recorrido de la última discusión.

Ahora, al vincular su aplicación, su marco modificado le dice al vinculador que dyld tiene que buscar OpenCV.framework en el contenedor de su aplicación (en el directorio ClipSplitter.app/Contents/Frameworks).

Ahora tiene que copiar el OpenCV.framework al contenedor de la aplicación. Puede hacer esto como parte de su proceso de compilación agregando una fase de compilación de archivos de copia: haga clic con el botón derecho en su destino, seleccione Agregar-> Fase de compilación nueva-> Fase de compilación de archivos nuevos. Seleccione "Frameworks" del menú emergente "Destino" y cierre el cuadro de diálogo.

Su objetivo contendrá ahora una nueva fase a la que puede agregar OpenCV.framework arrastrando el icono desde Project Navigator en el lado izquierdo de la ventana de Xcode. Tenga en cuenta que Xcode no le permitirá agregar una carpeta a la fase Copiar archivos con el botón '+', por lo que para copiar el marco de trabajo deberá arrastrarlo al & soltarlo.

+2

Esto fue casi completamente correcto. El comando que en realidad tuve que ejecutar fue: $ install_name_tool -id @executable_path /../ Frameworks/OpenCV.framework/OpenCV /OpenCV.framework/OpenCV pero esto fue más que suficiente para llevarme allí. ¡¡¡¡Gracias!!!! –

+0

Vaya, a la derecha. Eso sucede si no pruebas lo que estás escribiendo. Perdón por la confusion. –

+0

Si está instalando más de un marco en la ruta de instalación _que dependen el uno del otro_, sin embargo, esto no funcionará. También debe establecer la ruta de búsqueda del trayecto de ejecución en su aplicación xcode para buscar en @loader_path /../ Frameworks. Encontré esta explicación realmente útil: http://www.dribin.org/dave/blog/archives/2009/11/15/rpath/ – NHDaly

6

Es necesario configurar el ajuste de "El directorio de instalación" acumulación de @executable_path/../Frameworks

Véase el capítulo sobre Incorporación de un marco privado en su paquete de aplicaciones en https://developer.apple.com/library/content/documentation/MacOSX/Conceptual/BPFrameworks/Tasks/CreatingFrameworks.html

Saludos

+3

Al menos debe mencionar que esta configuración tiene que ser aplicada al construir el marco, no la aplicación que vincula el marco. –

+0

Sí, estoy seguro de que este es un buen consejo, excepto que no construí el framework OpenCV, lo descargué precompilado. –

+1

Me perdí la última oración, la respuesta de Nikolai es más apropiada en ese caso. Sin embargo, no estoy seguro de por qué preferiría pasar el tiempo arreglando bibliotecas precompiladas de código abierto en lugar de compilarlas correctamente. –

2

El uso de Xcode 5, es posible facilite esto usando el panel Build Phases del objetivo de su aplicación.

La apariencia por defecto de este panel es

Al pulsar el botón "+" debajo Copiar archivos, puede agregar su marco como un archivo que se va a copiar en los marcos en su paquete de aplicaciones.

Ahora, cuando construya, su Marco (s) se copiará en su paquete.

+1

Las imágenes están muertas. Volver a subir? – pkamb

Cuestiones relacionadas