2012-04-26 12 views
34

Duplicación de un objetivo en Xcode es una gran manera de crear múltiples aplicaciones o marco/biblioteca productos que tienen características algo diferentes utilizando la misma base de código como resultado de código condicional controlada por variables ambientales establecidos dentro de los valores de creación de destino o esquemas relacionados. Primero duplique su versión básica de trabajo conocido, luego establezca las variables ambientales que utilizará cada destino, luego comience a dividir el comportamiento del código con las declaraciones #ifdef del preprocesador en línea.Cuando duplique un objetivo en Xcode, ¿hay alguna manera para establecer el nombre que el objetivo tendrá antes o como se cree?

Sin embargo, cualquier objetivo duplicada se llamará "Copia original Nombre de destino". Esto puede ser cambiado de nombre, pero el info.plist también tendrá este nombre, sino que también puede aparecer en un par de ajustes esenciales de construcción, y puede ser un proceso tedioso y la introducción de eliminar todas las referencias a la "copia no informativa "versión del nombre del objetivo duplicado según cómo lo haga. Cuando creo marcos de iOS esto parece ser especialmente propenso a presentar problemas.

Mi pregunta es si existe alguna técnica para duplicar un objetivo que le permita especificar el nuevo nombre de destino en el momento de la duplicación, por lo que nunca se creará un nombre temporal equivocado o se crearán archivos que contengan ese error temporal nombre. O, alternativamente, si hay alguna forma de utilizar la funcionalidad de "refactorización" para corregir esto, es una forma automática.

Si hay algún tipo de suposición errónea contenida en la pregunta que explica por qué esta característica no se ha incluido en Xcode, que me haga saber. Estoy usando 4.3.

+4

No hay suerte con eso todavía, ¿verdad? – phi

+2

es una pena que nadie sepa cómo hacer eso ... –

+1

más de un año después y acabo de tener este problema en Xcode5, no entiendo por qué no puedo solucionarlo. – meda

Respuesta

5

Por desgracia, soy muy seguros de que no hay ninguna interfaz de usuario actual para esto, aunque fuertemente estoy de acuerdo en que sería una gran mejora; No puedo hablar por todos, pero prácticamente nunca quiero un objetivo llamado copia de Foo. Sugeriría filing a Radar.

+1

Como la única solución técnica concreta es usar CMake, que es interesante e informativo pero probablemente imposible para muchos desarrolladores y puede tener aspectos frágiles con la interacción entre el sistema de compilación personalizado y las implementaciones cambiantes de Xcode, estoy marcando este es el mejor con la esperanza de que fomentará más radares en esto. – Halle

-4
  • de selección de proyectos en el panel Navegador
  • Seleccionar destino que desea duplicar
  • botón derecho del ratón y seleccione "Duplicar"
  • Renombrar Target en XCode: haga clic en el destino seleccionado y editar aperturas en línea.
  • Abra el terminal y vaya al directorio/carpeta de su proyecto
  • Ejecute svn status para ver los cambios que XCode acaba de realizar.
  • XCode ha creado nuevo archivo Infocopy.plist y ha añadido bajo control de versiones si se utiliza uno. Normalmente se emplea para elegir nombre diferente así que sigue estos pasos:
  • Cancelar además de control de versiones: $> SVN volver Infocopy.plist
  • Retitularlo: $> mv Infocopy.plist YourNameInfo.plist
  • Añádelo al control de versiones : $> svn add YourNameInfo.plist
  • Establecer el nuevo nombre en su nuevo destino de compilación Ajustes llamada "Info.plist"
  • Cambiar nombre de archivo de destino correctamente: $> mv OrigTargetCopy.xcscheme YourTargetName.xcscheme
  • añadir el nuevo archivo de destino bajo control de versión: $> svn agrega YourTargetName.xcscheme
  • Cambie el nombre de su Producto en su nueva configuración de generación de destino denominada "Nombre del producto"
  • Es muy probable que también quiera establecer las nuevas configuraciones de compilación "Macros de preprocesador" para su nuevo objetivo.
  • Establezca los valores correctos Your YourInfoInfo.plist
  • Establezca la asignación de destino para archivos específicos de destino. Normalmente, YourNameInfo.plist será parte de su nuevo objetivo. Puede haber muchos otros archivos similares (icono, pantalla de inicio, otros gráficos, etc.).
+0

es como si la persona que publicó esta respuesta no leyera ni el título, ni el contenido de la pregunta publicada por el autor original, ni el detalle de la bondad de buscar una forma de 1 o 2 pasos para hacerlo. la solución descrita por el autor, y la solución que he estado usando ... ambos toman menos pasos ahora. esto es peor de lo que estamos haciendo, no mejor. –

+0

Esta solución no parece dar cuenta de todas las referencias al antiguo nombre que suelo encontrar en project.pbxproj. – Halle

0

Se podría, con algún esfuerzo, utilizar CMake para eso. Es un generador de sistema de construcción.

Puede ser difícil al principio aprender y configurar el proyecto, y algunas cosas (actualmente) no son fácilmente posibles para Xcode (como la adición de recursos) pero haría muy fácil la creación de nuevos objetivos con una configuración básica.

Básicamente, escriba CMakeLists.txt archivos en su árbol de fuentes para definir sus bibliotecas y destinos, luego defina los archivos fuente, etc., y luego genere el proyecto Xcode cada vez.

Adición de un nuevo objetivo sería muy fácil:

  1. ADD_EXECUTABLE(Target_Name Source_Files)
  2. SET_TARGET_PROPERTIES(Target_Name PROPERTIES COMPILE_DEFINITIONS Your_Additional_Defines)
  3. Vuelva a ejecutar CMake. (No es siquiera necesaria para cerrar el proyecto de Xcode)

Desventajas:

  • necesita tiempo para la instalación.
  • veces investigación es necesaria para conseguir algunas cosas para trabajar
  • Algunas cosas son actualmente no están bien apoyados a través de CMake
+0

+1 ¡No tenía idea de que CMake pudiera generar proyectos de Xcode! Re: Paso 3 - Cambiar los archivos de proyecto detrás de la espalda de Xcode (es decir, sin cerrar el proyecto y/o salir de Xcode) puede llevar a comportamientos erróneos raros y difíciles de diagnosticar. Siempre sugiero * al menos * cerrar el proyecto, y por miseria mínima, salir de Xcode todos juntos. – ipmcc

+0

Sí, es posible que tenga razón, es mejor no confiar ciegamente en XCode :).Pero al menos todavía no me encontré con problemas haciendo esas repeticiones de cmake "en vivo" en segundo plano. – ecreif

+0

disparar, odio ser una manta húmeda en esto, pero la forma en que describes esto, el "cierto esfuerzo" que me estás diciendo que tendría que hacer combinado con el "algunas cosas actualmente no son bien compatibles a través de CMake" más el "Algunas veces la investigación es necesaria para hacer que las cosas funcionen" parece ser más esfuerzo que los tediosos pasos propensos a errores que trato de evitar. Me está costando mucho comprar que el tiempo y el esfuerzo que tendré que poner para aprender CMake y hacer la configuración, de lo contrario, no sería mejor gastar lo que sé a mano, ya que realmente no lo hago así. a menudo. –

-3

doble clic en el objetivo de cambiar el nombre de al menos thetarget ... sigue buscando a cambiar el nombre del producto, pero eso no es tan importante si se puede cambiar el nombre de todo lo demás (como el idioma, etc.))

-1

En Xcode 6 (no seguro sobre versiones anteriores) la duplicación de un objetivo generará el apéndice "copiar" y cambiará el nombre de todos los menús localizados, por ejemplo. Sin embargo, es reversible actualizando el nombre del producto en Packaging en Build Settings/All. Info.plist aún tendrá que ser atendido, así como el esquema de nombres.

Cuestiones relacionadas