Mover archivos a una carpeta real en Xcode

177

Cuando comencé mi proyecto, estaba feliz de usar Grupos en Xcode en lugar de carpetas literales: dado que estoy usando el navegador en Xcode para acceder a todo, las cosas estaban muy bien organizadas y estaba feliz.

Sin embargo, ahora que el proyecto está a punto de ser compartido para el control de versiones, la carpeta del proyecto en sí es un espectáculo de terror para aquellos que intentan escanearlo a través de un terminal, alrededor de 300 archivos, más de la mitad de los cuales son gráficos.

Estoy tratando de reorganizar las cosas, crear carpetas reales e importarlas a Xcode. Lamentablemente, Xcode no me deja trabajar con ellos como lo hace con los grupos. Por ejemplo, si hago clic derecho en una carpeta agregada real (azul, no amarilla) y elijo agregar archivos existentes, en realidad no los coloca en esa carpeta, los coloca en su raíz.

Del mismo modo, no puedo mover un archivo desde una carpeta falsa (un grupo) a una carpeta real: Xcode no considera que las carpetas reales sean lugares válidos para mover cosas.

¿Qué me estoy perdiendo? ¿Cómo puedo convencer a Xcode para que me permita usar las carpetas de la misma manera que uso grupos? Aquí hay una respuesta a una pregunta algo similar , pero en realidad no resuelve mi problema ya que estoy trabajando con archivos existentes.

Matthew Frederick
fuente

Respuestas:

176

Un enfoque moderno (¡y absolutamente simple!) Para 2017 (Xcode 6, 7, 8 y, a veces, 9, ya que lo hace de forma automática algunas veces):

Si está moviendo un montón de archivos a una nueva carpeta y mantiene la jerarquía secundaria, en realidad es mucho más fácil que mover cada archivo individualmente:

  1. Cree nuevos grupos en el árbol de carpetas de Xcode y organice sus archivos en ellos como desee.
  2. Cree un árbol de carpetas físicas que coincida en Finder y organice sus archivos físicos en ellos para que coincidan con lo que hizo en el paso 1.
  3. Todas las referencias en Xcode ahora deberían ser rojas (¡eso está bien!).
  4. Desde el administrador de Identidad y Tipo, seleccione el Grupo en Xcode que desea reubicar, luego haga clic en el icono de la carpeta desde el panel de información:

  5. En el cuadro de diálogo de selección del Finder, busque la nueva carpeta equivalente que creó para este grupo en el paso 2. ¡ Todos los archivos dentro de ese grupo se redescubrirán automáticamente!

¿No es lindo? Como máximo, tendrá que repetir estos 5 pasos una vez para cada nuevo grupo que haya creado (¡lo cual es mejor que reubicar cada archivo individualmente!)

¡Puntos extra!

Digamos que accidentalmente arruinó el movimiento y ahora un montón de sus archivos están rojos y no se pueden encontrar: seleccione varios archivos que están rotos y, utilizando el mismo icono de carpeta en la captura de pantalla del paso 4, busque la carpeta correcta que contiene estos archivos y resolverán automáticamente las rutas faltantes.

Brandonscript
fuente
3
Sin embargo, al hacer esto, los archivos no se rastrean en Git. Por supuesto, siempre puedo leer el archivo, pero ¿me falta algo?
SleepNot
2
@jeraldo no estoy seguro de qué sabor de git estás usando, pero nunca he tenido ese problema. Sin embargo, puedes hacerlo fácilmente git add ..
brandonscript
Me falta algo y no estoy seguro de qué es. ¿Quizás no entiendo el significado de las palabras "organiza tus archivos en ellas ..." en el paso (1) ?? Supongo que esto significa "Agregar los archivos al grupo arrastrando y soltando o lo que sea". Pero si hago esto, entonces, por supuesto, Xcode reconoce los archivos y no los muestra en rojo, como se indica en el paso (3). ¿Alguna idea de lo que estoy haciendo mal?
hkatz
¿Movió los archivos físicos como en el paso 2?
brandonscript
1
¡Ah, lo descubrí! El paso (2) fue demasiado críptico para mí. Si lo estuviera reescribiendo, diría algo en el sentido de "Crear un árbol de carpetas físicas coincidentes, luego usar el comando Mostrar en el buscador de Xcode para ubicar los archivos que agregó al nuevo Grupo en el Paso (1) y mover físicamente esos archivos en la carpeta que acaba de crear ". Algo así ...
hkatz
119

MÁS EDITADO EN JUNIO DE 2017: Xcode 9 hace esto automáticamente, no se requiere ningún esfuerzo especial. Esta respuesta y Brandon solo se aplican a Xcode 8 y versiones anteriores.

EDITADO EN DICIEMBRE DE 2016: la respuesta de Brandon a continuación es una mejor solución ahora. Cuando se creó esta respuesta en 2010, esta fue la única opción que pude encontrar. Ahora sugiero la respuesta de Brandon , a continuación.


Resulta que mover archivos a carpetas reales es ciertamente posible, aunque no tan simple como debería ser.

Obtuve la información básica de una pregunta aquí, Xcode organizando archivos y carpetas (objetos del modelo de datos básicos - iPhone) , pero aprendí cosas importantes en el camino.

El proceso

Mover los archivos es un proceso de dos pasos con múltiples subpasos:

  1. Dile a Xcode dónde quieres que estén los archivos :

    • Haga clic con el botón derecho / Control y haga clic en el archivo o grupo de archivos que desea mover y elija Obtener información en el menú contextual que aparece. Las información sobre el grupo o la información de archivo aparecerá.

    • Haga clic en el botón Elegir en el extremo derecho de la ventana en el área Ruta . Aparece un cuadro de diálogo.

    • Navegue a la carpeta a la que desea mover los archivos. Cree una nueva carpeta si es necesario. Haga clic en el botón Elegir en la esquina inferior derecha del cuadro de diálogo, luego cierre la ventana Información de grupo / Información de archivo .

    • Los nombres del archivo / archivos en el grupo se volverán rojos para indicar que Xcode no puede encontrarlos en el lugar que especificó.

  2. Mueve los archivos reales

    • En el Finder (o Git) mueva los archivos que seleccionó en el paso 1 a las carpetas reales en las que los quiere.

    • Vuelve a Xcode. Los archivos / grupos deberían haberse vuelto negros nuevamente. Si alguno todavía está rojo, entonces has perdido mover algo a la carpeta correcta.

Consejos

Aprendí un par de cosas importantes mientras ajustaba los ~ 300 archivos en este proyecto:

  • Algunos archivos se niegan a moverse de esta manera; es decir, cuando navega al nuevo destino, el botón Elegir está deshabilitado, al igual que el botón Nueva carpeta . La solución, aunque no sé por qué hace la diferencia, es usar primero Xcode para poner esos archivos en un Grupo (haga clic con el botón derecho / control y seleccione Grupo , y asigne un nombre al grupo) y luego mueva el grupo a la nueva ubicación. Una vez que haya movido los archivos en el Finder, puede eliminarlos del grupo (arrastrándolos al nuevo grupo / carpeta principal y eliminando el grupo).

  • Deténgase y compile cada pocos minutos, después de completar el paso 2 para varios archivos. La construcción te dirá si has arruinado algo hasta ahora, lo que hace que sea más fácil regresar y arreglarlo antes de que hayas causado demasiado daño.

  • Si los archivos no se mueven al lugar que desea, tuve un mal momento moviendo algunos archivos que se crearon desde el principio en la carpeta Clases, simplemente puede arrastrarlos fuera de su lugar anterior en el buscador para en un lugar práctico como el escritorio, elimine las referencias a ellos en Xcode y luego vuelva a importarlos a través de la opción derecha / control-clic Agregar archivos existentes .

  • Si en el pasado usó Xcode para eliminar referencias a archivos sin moverlos también a la papelera en este proyecto, encontrará archivos que no tienen que moverse sino simplemente sentarse allí. Tenga cuidado de no hacer lo que hice, confundiendo los nombres de un grupo actual de archivos que estaba moviendo y los archivos más antiguos, que ya no están vinculados, insistiendo en que Xcode los importe porque creía que eran densos.

Espero que esto ayude a alguna persona futura. Me sorprende que haya sido tan difícil y ocasionalmente complicado como lo fue.

Matthew Frederick
fuente
2
Tener todos los archivos en el mismo directorio realmente me estaba molestando. ¡Gracias por esto!
Curtis Shipley
también puede: reorganizar la estructura del directorio a voluntad en el Finder, eliminar todos los "archivos rojos" en el proyecto y luego agregarlos nuevamente al proyecto utilizando la opción "grupo en carpetas"
bshirley
@bshirley Muy cierto, y si todos los archivos en el directorio principal necesitan estar en el proyecto, eso puede ahorrar mucho tiempo. Desafortunadamente, con proyectos que involucran a varias personas o que han tenido muchos lanzamientos a lo largo del tiempo, puede haber cualquier cantidad de archivos que no se deben agregar al proyecto. En ese caso, tendría que rastrear cuáles eliminó para restaurarlos, o algo similar.
Matthew Frederick el
11
en xcode 4 tuve que hacer algo diferente: no vi ningún enlace contextual de 'obtener información' al hacer clic derecho. en su lugar, tuve que mostrar la identidad y la vista de tipo (probablemente un nombre para esto que no sé). es el botón que se encuentra más a la derecha en las opciones de vista en la barra de encabezado xcode4. Primero muevo el archivo en el sistema de archivos, y luego hago clic en el icono extraño al lado de la ruta, y le digo a xcode dónde está el nuevo archivo.
Evan Pon
66
El problema con el movimiento de archivos es que cuando ya está bajo el control de SVN, debe asegurarse de usar una aplicación como Versions o Cornerstone para mover los archivos ... ¡O terminará con terribles problemas de control de versiones! Ojalá Apple simplemente desechara la idea de "grupos" y tuviera todo en carpetas reales, a-la Eclipse ...
jowie
104

En Xcode 5 o Xcode 6:

  1. Crea las carpetas que se asignan a tus grupos en Finder
  2. Mueva los archivos a esas carpetas en Finder
  3. Seleccione cada archivo que sea rojo en la barra lateral de Xcode a la izquierda
  4. Haga clic en el botón "Mostrar / Ocultar utilidades" para mostrar la barra lateral derecha (ver figura)
  5. En "Identidad y tipo", haga clic en el pequeño botón y seleccione la ubicación del archivo (ver figura)

ingrese la descripción de la imagen aquí

Salud.

reinaldoluckman
fuente
1
Nota para algunos usuarios, si recibe un error de que se hicieron cambios después de que la información del encabezado fue precompilada, ¡simplemente limpie el producto y todo saldrá bien!
Quantum
Seguí este enfoque en Xcode 5.1.1 para mover un archivo de encabezado a una carpeta física. Puedo mover el archivo. Pero Xcode dice "archivo no encontrado" mientras construye el proyecto. Podrias ayudarme por favor.
Rashmi Ranjan mallick
22

He encontrado que la forma más confiable de evitar el diseño atroz de XCode aquí es organizar TODOS sus archivos en Finder, por dos razones:

  1. Finder no comete "errores", a diferencia de la GUI de XCode
  2. Una vez que las cosas están organizadas en Finder, puede arrastrar / soltar carpetas completas de Finder en XCode, y ... hace exactamente lo que quería, sin esfuerzo

Incluso al mover archivos XCode existentes, es más rápido hacer esto:

  1. Seleccione los archivos en Finder
  2. Crea una carpeta en Finder para ellos
  3. Arrástrelos / suéltelos a la carpeta (los mueve automáticamente)
  4. Arrastre / suelte la carpeta Finder en Xcode (automáticamente: crea la carpeta Xcode, agrega todos los archivos en la carpeta Finder)
  5. cmd-selecciona cada archivo "rojo" que ves ahora en Xcode (porque los moviste) y presiona la tecla Eliminar

NB: nunca uso la opción "crear carpetas arrastradas con subgrupos", porque en XCode 3 eso a menudo tenía errores y podía corromper proyectos. Apple claramente (en mi humilde opinión) NO utiliza esta función internamente, de lo contrario, nunca se habría permitido que fuera tan defectuosa; Si Apple no usa nada, generalmente tampoco es seguro usarlo, no son buenos para probar :)

Adán
fuente
2
Intentaré esto mañana ... esta fue la solución simple que estaba buscando. ¿Por qué lo hicieron tan difícil? Si solo reflejara el sistema de archivos, habría sido mucho menos confuso. ¡Gracias!
delux247
Esta fue la cuarta solución que probé y la ÚNICA que pude trabajar con xcode 5.1.1. Además, por alguna razón, esto no funcionaría para ninguna de mis categorías. Tuve que moverlos literalmente a la Papelera, sacarlos de la Papelera y luego volver a agregarlos a xcode y finalmente funcionó.
user3344977
21

Hay una herramienta de línea de comandos simple de configurar y usar : "synx" disponible en github que hace exactamente lo que se necesita aquí.

Reorganiza la carpeta del proyecto Xcode en el buscador para que coincida con los grupos Xcode en el proyecto.

Puede encontrarlo aquí: https://github.com/venmo/synx

ACTUALIZACIÓN: XCode 9 admite esta función de forma predeterminada. Por lo tanto, ya no es necesario usar otras herramientas.

Nitesh Borad
fuente
Gran herramienta, pero se vuelve extremadamente lenta en proyectos más grandes (puede llevar unos minutos completar el trabajo) y parece que ya no es compatible.
Lukasz
6

Xcode 9

Parece que Xcode 9 ahora lo admite de forma predeterminada. Cuando mueve archivos de un grupo a otro, el archivo también se moverá de la carpeta anterior a la nueva carpeta. Esto se anunció en WWDC 2017.

Guy Daher
fuente
2

Por lo general, muevo los archivos al directorio directamente en el Finder, luego corrijo los archivos con nombres de color rojo en XCode en su cuadro de diálogo "Obtener información": haga clic en el botón "Elegir ..." y seleccione la nueva ubicación del archivo. Esa es la primera respuesta cuando quiero mover archivos en XCode, y funciona.

Xie Yanbo
fuente
1

A partir de Xcode 4.5 cuando arrastra una estructura de carpetas, se convierte automáticamente en grupos anidados en el Navegador de proyectos. Luego, si busca en el disco (por ejemplo, haga clic con el botón derecho y elija Mostrar en Finder), la estructura de la carpeta se conservará.

Descubrí que tratar de arreglar las cosas de un proyecto anterior era simplemente un dolor. Resultó mucho más fácil eliminar estos archivos y arrastrarlos nuevamente.

Snowcrash
fuente
1

Para mover una carpeta en xcode 4.5 solo ...

  1. Elimine los archivos / grupos de xcode y seleccione "Eliminar referencia".
  2. Vaya al buscador y mueva la carpeta / archivos según sea necesario.
  3. Una vez hecho, vuelvo a Xcode y elijo Archivo-> Agregar archivos a {ProjectName}.
  4. Asegúrese de que "Copiar elementos en la carpeta del grupo de destino (si es necesario)" esté marcado
  5. Asegúrese de que "Crear grupo para cualquier carpeta agregada" esté marcado
  6. Asegúrese de que "Agregar a destino" esté marcado para su proyecto
Shannon Cole
fuente
1

La técnica más fácil para XCode 8 ...

Suponiendo que tiene los archivos A, B, C en un grupo lógico, pero desea que se trasladen a una carpeta en su disco duro.

  1. Crear una carpeta de destino a través del Finder
  2. Agregue la carpeta en XCode (Archivo -> Agregar archivos) usando el panel Opciones para seleccionar una Referencia de carpeta (no un grupo)
  3. Arrastre los archivos A, B, C del grupo (antiguo) a la referencia de carpeta (nueva) en el navegador de proyectos. XCode moverá los archivos a la carpeta, tanto en el proyecto como en el disco.

Hecho.

software evolucionado
fuente