2011-01-11 33 views
41

Tengo algunas clases de Objective-C, que actualmente estoy usando tanto en una aplicación Cocoa (Mac OS X) como en una aplicación Cocoa-Touch (iOS). Actualmente, cuando actualizo esas clases, tengo que copiar los archivos actualizados .h y .m en ambos proyectos. No es gran cosa, pero los voy a utilizar en muchos más proyectos.¿Cómo construir una biblioteca estática Objective-C?

Por lo tanto, deseo construir estas clases en una biblioteca estática Objective-C. Y luego vincular contra esa biblioteca en todos los otros proyectos.

¿Existe alguna manera de crear una biblioteca estática de modo que funcione con las aplicaciones Cocoa y Cocoa-Touch?

He intentado simplemente construir una biblioteca estática Cocoa con estas clases, pero consigo varios errores cuando trato de vincularla con esa biblioteca en mi aplicación Cocoa, y estoy seguro de que provienen del hecho de que no lo estoy haciendo bien

Entonces, ¿cómo puedo construir una biblioteca estática Objective-C la forma correcta manera? ¿Debo construir una biblioteca estática Cocoa-Touch y Cocoa? ¿O puedo simplemente hacer uno? ¿Cómo se hace esto?

¿Hay algún tutorial bien hecho sobre este tema?

He buscado en la web y no puedo encontrar un tutorial exhaustivo sobre este tema, por lo que he planteado la pregunta aquí, con la esperanza de que se publique una gran respuesta y esta pregunta puede servir como un recurso para mí y para futuros interrogadores.

+0

Buena pregunta y desearía que hubiera más ejemplos de hacerlo bien. Echaré un vistazo al tutorial que vinculó y veré si hay algo que pueda agregar. ¿Tu objetivo es construir una biblioteca estática universal que puedas compartir con otras aplicaciones como recurso binario o te gustaría crear una dependencia de proyecto en el producto de compilación de algún proyecto compartido? – Jonah

+0

biblioteca universal estática. :) – Alex

+0

Consulte este documento de Apple: https://developer.apple.com/library/ios/technotes/iOSStaticLibraries/Articles/configuration.html –

Respuesta

25

Para XCode 5. Estas respuestas parecen un poco desactualizadas. Puede ver los pasos principales aquí http://www.raywenderlich.com/41377/creating-a-status-library-in-ios-tutorial. Pero Xcode 5 hace mucho más trabajo para usted y ahora funciona casi como usted lo desea.

1.Create estática nueva biblioteca de aplicaciones en Xcode New Static Library in Xcode

2.You puede eliminar los archivos que crea y añade su propio. Agregue sus métodos, etc. Code Code Code

3.El pequeño problema con las bibliotecas estáticas, es que solo puede compilar para el dispositivo o ejecutar en el simulador. Por lo tanto, debemos crear una biblioteca que admita ARM e i386 Architectures, para ello necesitamos crear un binario universal (de modo que sea compatible con el simulador y las compilaciones de dispositivos).

Crea un nuevo objetivo (Archivo> Nuevo> Destino). New Target

4.Select nuevo objetivo a continuación, añadir una nueva fase de construcción (Editor> Agregar fase de construcción> Añadir Ejecutar script de construcción Fase New Build Phase

5.Select la fase de construcción y entrar en la secuencia de comandos desde este enlace en ejecución guión ventana. https://gist.github.com/sponno/7228256

Run Script Code

6.Now que necesita para construir cada arquitectura (simulador y el dispositivo iOS)

6.2.Select nuestra libary y luego de dispositivos iOS, haga clic en construir o ejecutar (Comando + B)

6.3.Then para el simulador (seleccione la biblioteca de iconos muy superior izquierda de Xcode y luego el simulador de iOS) enter image description here

7.Ahora desea construir el icono de BullsEye> Dispositivo iOS. Este será el objetivo agregado y combinará nuestras dos bibliotecas en un nuevo archivo universal.

8.Mira si esto funcionó. Ampliado la carpeta "Productos" en el árbol izquierdo, haga clic derecho en el archivo que termina en ".a" y "Mostrar en Buscador"

9.Si todo esto funciona, debería ver los siguientes archivos en el buscador. podrás ver el Library .a file and include files

10. El último paso es fácil, basta con arrastrar el archivo "library.A y la carpeta incluye en su nuevo proyecto de Xcode. enter image description here

enter image description here

En su nuevo proyecto, no tendrá que hacer nada más, aparte de importar los archivos de encabezado que desea usar, pero no tiene que cambiar los indicadores de enlace o las rutas de búsqueda del encabezado. Simplemente funcionará.

(se agradece cualquier comentario) o edite mi publicación para mejorar la claridad.

** *** BONUSPOINTS Instalar VVDocumenter https://github.com/onevcat/VVDocumenter-Xcode y usar esto para documentar cualquier archivo header.h que va a compartir con la biblioteca.

Ahora cualquiera que esté usando su biblioteca puede optar + clic para mostrar la ayuda contextual para sus clases.

Context Aware Help based on header file

+1

¡Esto es asombroso! Xcode y Apple han recorrido un largo camino desde que hice mi pregunta original y esta es la forma en que lo hago ahora. http://cocoapods.org/ también parece prometedor si te gusta la forma de hacer las cosas con ruby ​​gem. – Alex

+1

Sorprendente respuesta amigo. ¡Muchas gracias! – CalZone

12

Terminé encontrando this tutorial y realmente funcionó muy bien. Si alguien aún desea ofrecer asistencia, hágala y lo más probable es que la modifique y marque como la respuesta aceptada.

+2

¿Podría marcar esto como la respuesta aceptada? – FreeAsInBeer

+0

¿Alguien puede hacer referencia a un tutorial más reciente? – Stavash

+0

http://www.raywenderlich.com/41377/creating-a-status-library-in-ios-tutorial Es el que estoy usando. Finales de 2013, así que más actual. –

11

(utilizando el tutorial como punto de partida)

ahora crear una segunda diana en la xcodeproj biblioteca para el otro sistema operativo.

configure los sdk de cada destino usando un archivo xcconfig (uno para cada sistema operativo). reutilice estos archivos xcconfig en sus otras librerías. esto también permite un control global fácil de las configuraciones de construcción.

configure referencias de enlaces y dependencias en sus objetivos (aplicaciones) como de costumbre, pero seleccione la biblioteca de destino correcta.

agregue un objetivo agregado al proyecto de la biblioteca para una simple metacompilación/fácil mantenimiento.

- o -

hacerlo todo mediante la introducción de una capa de secuencias de comandos o la creación de una herramienta de generación personalizada.

+1

+1, pensamientos interesantes. – Alex

2

También encontré esto "Building a Static Library with Jenkins" que es realmente bueno. Habla sobre cómo configurar correctamente una lib estática, cómo hacer que Jenkins la construya automáticamente y luego colocar los archivos .a y .h resultantes en un lugar desde donde los puedes capturar.

Combina eso con CocoaPods o Maven (no he hecho esto aún) y podrías tener un pequeño ecosistema bastante agradable.

Cuestiones relacionadas