2009-02-03 6 views
6

Estoy tratando de usar el marco PLDatabase en mi aplicación de iPhone. He agregado el marco a mi proyecto de Xcode. Sin embargo, cuando ejecuto mi aplicación, se bloquea con el siguiente error:¿Cómo agrego un proyecto de Framework to iPhone de un tercero?

dyld: Library not loaded: @loader_path/../Frameworks/PlausibleDatabase.framework/Versions/A/PlausibleDatabase 
    Referenced from: /Users/todd/Library/Application Support/iPhone Simulator/User/Applications/BB3C66B2-A5BB-4329-B163-AB0072411AF1/Congress.app/Congress 
    Reason: image not found 

No estoy seguro exactamente donde el marco tiene que residir en el disco que se encuentran.

Gracias

Respuesta

10

iPhone no soporta el enlace dinámico de los marcos incrustados. Si bien es posible que pueda hacer que el simulador funcione, no funcionará en el dispositivo. Si desea usar el código, debe compilar la biblioteca estática para el marco (libpldatabase.a) y luego vincularlos a la aplicación.

La interfaz gráfica de Xcode no proporciona una interfaz agradable para la vinculación estática, necesitará agregar indicadores apropiados en sus preferencias de compilación (-lpldatabase -L/whatever/dir/it/is/in).

6

RE @mipadi: ZeroLink se eliminó en Xcode 3.1 y no existe para el iPhone SDK. La respuesta correcta es Louis '; el iPhone no admite marcos cargados dinámicamente en aplicaciones creadas por desarrolladores.

Xcode tiene una buena interfaz de usuario para bibliotecas estáticas; simplemente arrástralos al proyecto y se agregarán a la fase de enlace. No hay necesidad de preocuparse por las banderas del enlazador. El problema surge cuando necesitas usar los encabezados suministrados con esas librerías estáticas (luego necesitas agregar las rutas de búsqueda de encabezado manualmente) o cuando una lib está en conflicto con un dylib disponible (es cuando tienes que agregar la bandera -l manualmente) .

8

No es estrictamente cierto que el iPhone no admite enlaces dinámicos. Lo que es cierto es que las aplicaciones instaladas por la App Store no pueden enlazarse dinámicamente.

La tienda de aplicaciones/ituned instala programas en el directorio/private/var/mobile/.... Cualquier programa abierto que viva en ese subdirectorio está cerrado y tiene ciertos derechos eliminados cuando se abre. Los procesos chroot no pueden bifurcarse, no pueden ejecutarse en segundo plano, no pueden cargar bibliotecas dinámicas y no pueden guardar archivos fuera de sus pequeñas áreas protegidas del disco (con la excepción de las fotos en el directorio de fotos).)

Dicho esto, el iPhone tiene un sistema operativo moderno que admite enlaces dinámicos muy bien. El acto de 'jailbreaking' es en realidad instalar un programa fuera de la cárcel chroot que luego puede hacer cosas como tenedor y guardar archivos en otros lugares en el disco y cargar el código dinámico.

Apple (y la comunidad de iPhone abierta) tiene una gran cantidad de programas que se ejecutan en el teléfono (como las aplicaciones MobilePhone, Mobile Safari y SpringBoard) que se pueden ejecutar en segundo plano y cargar bibliotecas. Se colocan en un lugar diferente en el disco (/ private/var/stash/Applications a menudo).

Entonces ... si quiere vender su aplicación en la tienda de aplicaciones, no puede cargar una biblioteca dinámica. Que para la mayoría de las personas significa que no puedes cargarlo en absoluto. Pero si desea distribuir su aplicación a través de Cydia (un instalador de aplicación de teléfono jailbroken común), entonces puede salirse con la suya jailbreak el teléfono y cargar su biblioteca dynaamic. De hecho, debido a que el proceso de instalación de itunes es el culpable, como has aprendido, ni siquiera puedes cargar un dylib desde tu propia aplicación que escribes en tu propio teléfono ... a menos que tengas un jailbreak.

Cuestiones relacionadas