2010-12-01 10 views
7

Si crea una biblioteca estática para iOS, ¿tiene que distribuir los archivos de encabezado con ella o hay otra forma de hacerlo funcionar?Creación de una biblioteca estática para iOS y simulador para su distribución

Actualmente tengo un solo archivo my_lib.a para el dispositivo y el simulador, pero cuando lo arrastro a otra aplicación de prueba para usarlo, dice que no puede encontrar el encabezado y que todos los lugares donde lo estoy usando en el código no están declarados. Entonces me imagino que estoy haciendo algo mal, o también tengo que enviar los archivos de encabezado apropiados con él.

Antecedentes de mi proceso:

que he visto dos guías para la creación de una biblioteca estática para ambos dispositivos y simulador. Uno en este sitio: Build fat static library (device + simulator) using Xcode and SDK 4+

y uno aquí: http://mark.aufflick.com/blog/2010/11/19/making-a-fat-static-library-for-ios-device-and-simulator

que utiliza el segundo sitio sólo probarlo. También estoy un poco curioso si lo hice correctamente. Acabo de entrar en las carpetas Release-iphone (os | simulator) y encontré el .a en el ios one y el .o en el simulador uno.

Respuesta

3

La respuesta corta es sí, debe empaquetar los archivos de encabezado con su biblioteca estática. Debe empaquetar los archivos de encabezado con cualquier biblioteca de hecho, dinámica o estática. La biblioteca en sí contiene el código compilado, pero aún tiene que decirle al compilador sobre los identificadores en la biblioteca, de modo que cuando compila su código, sepa que existen.

Si le importa, puede empaquetar su biblioteca estática en un marco estático con un poco de cuidado. Simplemente crea la misma estructura de directorios que tiene un marco dinámico, con su archivo .a en lugar del archivo .dylib (o .so). Los marcos contienen un directorio para los encabezados, por lo que puede distribuir los encabezados y los binarios en un único paquete, y puede importar fácilmente los encabezados desde un marco sin interferir con la configuración de compilación de Rutas de búsqueda de encabezado adicionales.

+0

Gracias por la información Adam. Según lo entiendo (y de lo que he buscado en Google), los desarrolladores no pueden crear marcos para iOS. ¿Ya no es así y, de ser así, tiene algún recurso sobre cómo crear este marco? Finalmente, ¿estoy creando mi biblioteca universal correctamente? Solo pregunto porque la guía (segundo enlace) que utilicé no menciona los archivos .o. – Aaron

+0

Descubrí que estaba yendo a la carpeta .build de mi proyecto (project_name.build/Objects-normal/ARCHITECTURE/project_target.[a|o]) cuando debería haber estado yendo al nivel superior Releases-iphone [os | simulator ]/project_target.a. Haciendo lo posterior tiene el armv6 y el armv7 en un archivo .a y el i386 en el archivo .a de la carpeta del simulador. Además, al agregar la biblioteca iphone os no se especifica una arquitectura, ya que es un archivo grueso que contiene armv6 y armv7. – Aaron

+0

No conozco ningún recurso realmente bueno en marcos estáticos, ya que Xcode no tiene una forma incorporada de hacerlos. Los descubrí al encontrar un par de proyectos que contenían bibliotecas estáticas y separarlos. PLBlocks vino como un marco estático, creo que GHUnit viene como un marco estático, y sé que Cedar (http://github.com/pivotal/Cedar) tiene un objetivo para construir un marco estático usando scripts bash. Échales un vistazo; es simplemente una cuestión de duplicar la estructura del directorio y los enlaces simbólicos. –

0

Por si acaso es útil: seguí las instrucciones de Ray Wenderlich del here y pude producir un marco para iOS que admitía varias arquitecturas a la vez (incluido el simulador). Las instrucciones son un poco largas para copiar y pegar aquí.

Cuestiones relacionadas