Pregunta

Tengo una aplicación cliente-servidor <=> estoy construyendo para Mac OS X, usando Objective-C / Cacao y xCode. He creado un proyecto diferente, tanto para las aplicaciones que tengo, y me pregunto la mejor manera de clases de acciones entre ellos. Hay varias clases que he hecho que serían útiles a ambos. Esto ahora he estado copiando a su alrededor, pero siento que esta no es la mejor solución.

¿Cómo puedo compartir clases con eficacia? ¿Debo hacer de nuevo como 1 proyecto y sólo tienen dos tipos de generación? ¿Cómo puedo hacer esto?

Cualquier otra información?

Gracias.

¿Fue útil?

Solución

Si tiene dos o más productos que se van a compartir una cantidad buena de código común, como un conjunto de productos, es posible que desee considerar la creación de un solo proyecto de Xcode, y luego agregar un destino diferente para cada producto que se se construirá a partir tanto de código compartido y productos específicos. Con una gran cantidad de código compartido, un par cliente / servidor de productos, posiblemente, sería grandes candidatos para ir de esta manera.

Hervido abajo, el acuerdo básico es que para cada objetivo en su proyecto Xcode que se quiere construir, se especifica que los archivos se utiliza para construirlo: archivos de origen, el arte, xibs, y así sucesivamente. De esta manera, por ejemplo, usted puede configurar su producto de cliente que se construirá el uso de archivos A, B, C, D, E, F, y el producto de servidor que se construirá el uso de archivos A, M, X, Y, Z.

A mi me gusta tener todos los productos relacionados que viven bajo un mismo proyecto Xcode "techo", ya que no tendrá que saltar en torno a proyectos de Xcode, y realmente simplifica la gestión de SMC para los archivos compartidos.

Aquí hay un enlace a la documentación de Apple en esto: https : //developer.apple.com/library/mac/#featuredarticles/XcodeConcepts/Concept-Targets.html

Actualización: hay un poco de molestia adicional involucrado cuando se trata de la configuración de archivos de cabecera de objetivos específicos en Xcode (que es siempre algo ... ¿no ?!); por ejemplo, el uso de "myHeaderA.h" para este objetivo y "myHeaderB.h" para ese objetivo. Aquí hay una gran puesto que las acciones de cómo hacerlo: qué archivo de cabecera del proyecto Xcode incluirá . Precaución: después de configurar las cosas de esta manera, Xcode ya no conoce los caminos para buscar cualquiera de sus archivos de cabecera de destino, así que hay que configurarlos manualmente. Para ello, haga clic en Obtener información en su objetivo, seleccione la categoría Generar, a continuación, añadir sus caminos a través de la configuración de "Rutas de búsqueda de cabecera". Los caminos se buscan en el orden en que se introducen.

Otros consejos

Una muy buena manera de hacerlo es poner el código compartido en el sistema SCM e incluirlo en cada proyecto que desea en. De esta manera cada proyecto puede compartir el código, se puede editar en cualquier lugar y sólo comprobar los cambios de nuevo en control de código fuente cuando se siente bien acerca de ello -. y luego todos los demás proyectos se benefician de su trabajo

Esto tiene grandes ventajas sobre otras formas de hacer que la OMI:

vs. marcos : Packaging código en un marco es bastante molesto, y los marcos de paquete-privada tome un tiempo excesivamente largo para la carga - en especial sólo para obtener algunas clases en su aplicación. Wil Shipley de Omni Group (en el momento) una vez encontró que los marcos de la compañía incluye en todas sus aplicaciones fueron sumando varios segundos a la hora de inicio de cada aplicación. Embalaje clases privadas en un marco también puede fomentar una mayor acoplamiento de lo estrictamente necesario - que es realmente tentador sólo para hacer un marco TRUE donde residen todas sus clases compartidas, por lo que empezar asumiendo este código será siempre juntos en vivo. y se convierte en inseparables. Básicamente, los marcos son un martillo y este problema es un tornillo.

vs. simplemente incluyendo archivos : esperamos que pueda poner su aplicación en un SCM en algún momento de todos modos, y simplemente incluyendo los archivos en el lugar crea un problema porque van a estar ausentes de SMC. Copiar los archivos en cada proyecto introduce el problema opuesto -. Cada proyecto incluirá su propia versión de los archivos y que tendrá para propagar manualmente los cambios útiles

La mejor manera es crear un marco separado que contiene las clases compartidas. Esto se puede compilar una vez y ligada en ambos proyectos de aplicación.

de Apple en lo que son los marcos .

La solución más rápida es añadir solamente referencias de los archivos .h y .m a uno de los proyectos. Sólo desmarcar la opción "copiar" -checkbox en el "agregar archivos existentes" -dialog en Xcode. Tenga en cuenta el también podría ser necesario copiar los archivos de referencia si se muda / compartir su proyecto.

Yo tenía un problema similar, y la respuesta aceptada anterior puede causar problemas para un novato.

Será bien el si los dos proyectos se comunican por algún protocolo, por ejemplo, TCP / IP, o si no se comunican. Sin embargo, si un proyecto es un paquete (por ejemplo, un plug-in) que se necesita para acceder a las mismas clases que una aplicación (a la vez que se ejecute en el mismo proceso) obtendrá problemas con la vinculación o advertencias en tiempo de ejecución / errores acerca de tener clases con el mismo nombre. La forma más sencilla de resolver este problema es utilizar un marco. Con un marco que puede configurarlo de modo que todos los tres objetivos están en el mismo proyecto, o incluso se puede incluir en el marco de proyectos separados.

Yo tenía un proyecto con una aplicación y un plug-in paquete, aquí están los pasos que hemos seguido en Xcode 6:

  1. Crear un marco, copiar todo el código compartido a través de.
  2. En la cabecera principal del marco, incluya los encabezados de todo el código compartido.
  3. Construir el marco de probarlo construye (por ejemplo, seleccionar el esquema del marco y haga clic en juego)
  4. Vaya a la sección Fases de construcción de la aplicación y el Plugin Bundle y añadir el nuevo marco de destino ‘dependencias’ y ‘Enlace binario con bibliotecas’
  5. Para incluir la materia marcos de código en la aplicación y el paquete, sólo tiene que utilizar la cabecera principal, y el uso <> en lugar de “" por ejemplo si su marco se llama el uso de Foo import

Los cambios en el marco se compila automáticamente cuando se ejecuta la aplicación principal, por lo que puede, en efecto, pasar por alto el hecho de que son diferentes objetivos.

He encontrado un buen artículo sobre este tema aquí: http: // www.clintharris.net/2009/iphone-app-shared-libraries/ Esto responde a mi pregunta, que es específicamente sobre múltiples aplicaciones para el iPhone de código compartido. No menciona marcos (arriba), así que no puedo decir si su sugerencia (referencias proyecto de Xcode) se compara favorablemente con la solución marcos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top