¿Cómo debería organizar mis archivos de proyecto Xcode?
filesystems organization (8)
Estoy tratando de entender la organización de archivos de Xcode, o la falta de ellos. Puedo hacer todo lo que quiero en el proyecto y se ve muy bien con todas las carpetas y estructuras "falsas". Voy a ver el sistema de archivos y me muevo ENORME . Intenté importar archivos con la opción Create Folder Reference for any added folder
y eso funciona, un poco. Obtengo la estructura que quiero tanto en Xcode como en el sistema de archivos.
Problemas: cuando agrego un archivo a una carpeta en el sistema de archivos que es una referencia de carpeta en Xcode, no está en Xcode cuando voy a buscar, ni siquiera después de volver a cargar el proyecto. Los archivos / subcarpetas en una referencia de carpeta no se pueden mover en Xcode. Cuando los muevo en el sistema de archivos obtengo enlaces rojos (¿no puedo encontrar el archivo?) En Xcode.
¿Cómo mantengo un proyecto organizado y un sistema de archivos? ¿Cómo puedo configurar un proyecto para reconocer una carpeta y mostrar sus archivos y subcarpetas (actuales y actualizados) en mi proyecto?
Otro problema con el que me encuentro, si utilizo una referencia de carpeta y cambio un archivo, el archivo no se actualiza en mi aplicación a menos que realice una limpieza y una reconstrucción completas. Si no uso una referencia de carpeta, todos mis archivos se vuelcan en la carpeta de recursos del paquete de aplicaciones, no en la bonita estructura que tengo en mi proyecto.
¿Debería importarme? ¿Debo usar las carpetas falsas y dejar que todo vaya a todas partes y no me importa? Mi paquete de aplicaciones será un desastre, el sistema de archivos será un desastre, pero todo funcionará ... ¿Lo esperaría?
Editar:
Mi principal razón para querer un sistema de archivos organizado es que los archivos de recursos (imágenes, sonidos, otros archivos de datos, etc.) no se editen en Xcode. Tengo que acceder a ellos en aplicaciones de terceros a través del sistema de archivos. Si es un desastre las cosas son más difíciles de encontrar y mantener en las otras aplicaciones de terceros.
Además, ¿qué sucede si quiero una estructura como la siguiente?
- Imágenes / Fondos / Nombre.png
- Imágenes / Iconos / Nombre.png
- Imágenes / Títulos / Nombre.png
¿Debo usar nombres de archivos largos en lugar de carpetas para organizar?
- Images_Backgrounds_Name.png
- Images_Icons_Name.png
- Images_Titles_Name.png
¿Debería importarme? ¿Debo usar las carpetas falsas y dejar que todo vaya a todas partes y no me importa? Mi paquete de aplicaciones será un desastre, el sistema de archivos será un desastre, pero todo funcionará ... ¿Lo esperaría?
IMO no ... :) básicamente. El punto es que XCode ha sido diseñado para brindarle la mejor experiencia de programación. Si Apple quisiera que organizaras físicamente todos tus archivos y carpetas dentro del sistema de archivos real, lo habrían hecho de esa manera.
Realmente no entiendo por qué querrías organizar todos los archivos y carpetas de esta manera de todos modos. No hace ninguna diferencia en la ejecución de la aplicación y las carpetas (grupos) "falsos" en XCode proporcionan de manera adecuada la ayuda visual necesaria para usted (y otros) para navegar a través de sus clases y otros recursos. Organizarlo correctamente en su sistema de archivos (como ha encontrado) seguramente solo hace las cosas más difíciles?
Esto cambió con Xcode 9. De las notas de la versión :
Los grupos en Project Navigator ahora están más estrechamente asociados con los directorios en el sistema de archivos. (28612132)
- Al arrastrar archivos entre grupos en Project Navigator, se mueven los archivos en el sistema de archivos y se actualizan todas las copias de trabajo de SCM asociadas.
- Cuando un grupo está conectado a una carpeta en el sistema de archivos, la creación, cambio de nombre y eliminación de grupos actualiza los archivos y carpetas correspondientes en el sistema de archivos.
- Para eliminar una conexión entre un grupo y una carpeta en el sistema de archivos, seleccione el grupo y luego abra el inspector de archivos y haga clic en el botón Borrar ruta (X).
- Para agregar o actualizar una asociación de un archivo o una carpeta en el sistema de archivos a un archivo o un grupo en el proyecto, seleccione el archivo o grupo, abra el inspector de archivos y arrastre el archivo o carpeta correspondiente a la sección Ubicación en el archivo inspector.
El nuevo comportamiento está disponible desde el comando ''Nuevo grupo con carpeta'' (que puede aparecer como ''Nuevo grupo''), mientras que el antiguo comportamiento está disponible desde el comando ''Nuevo grupo sin carpeta'' (que también puede aparecer como ''Nuevo'' ¡Grupo!) El uso dominante entre los grupos existentes en la carpeta de destino parece determinar qué comando se etiqueta como ''Nuevo grupo''. Es más que un poco confuso, pero si tiene la costumbre de elegir uno u otro, la idea parece ser que puede seguir con el comando predeterminado ''Nuevo grupo''. (Véase la explicación más completa de rob mayoff. )
Lo que hago es crear un grupo para representar cada carpeta y luego, antes de agregarle archivos, en el panel derecho, primera pestaña, inmediatamente debajo de "Ruta", hay un ícono que le permite elegir la carpeta. En ese cuadro de diálogo de carpeta, creo una carpeta que coincide con el grupo y lo elijo.
En xcode3, esto dio como resultado diálogos de archivos nuevos y agregados comenzando en esta ruta. Eso hizo que valga la pena el esfuerzo. Xcode4, sin embargo, no respeta esta configuración. Por lo tanto, es cuestionable si hay algún valor real en él. También deseo que XCOde sea compatible con una mejor organización del sistema de archivos.
Teniendo en cuenta que los nombres de los archivos deben ser únicos dentro de un proyecto, independientemente de los grupos y las carpetas, existe una justificación para aceptar la estructura de carpetas planas por defecto y usar grupos para la conveniencia de IDE. Es difícil venir de otras plataformas donde esto está mal visto.
OK, así es como funciona:
Xcode no conoce ningún archivo hasta que lo cuentes. Es decir, incluso si agrega un archivo manualmente en el buscador (generalmente una mala idea) a una carpeta que contiene archivos en un proyecto de Xcode, no los conoce hasta que "agregue el archivo existente al proyecto".
La mejor práctica (imo) para agregar un archivo existente (o grupo de archivos) a un proyecto (por ejemplo, un código que acaba de descargar) es elegir "agregar archivos existentes" y luego "copiar elementos a la carpeta del grupo de destino (si es necesario) "en el siguiente diálogo, si desea que su proyecto tenga una copia de los archivos en cuestión, en lugar de simplemente una referencia a ellos (hay ventajas y desventajas de ambos).
No se preocupe demasiado por el nombre de las carpetas en Xcode, o donde ponga cosas, pero trate de mantener un estándar que tenga sentido en su entorno. Por ejemplo, siempre pongo las clases que escribo en "Clases" y tengo carpetas separadas para cualquier código de biblioteca que descargué para usar en el proyecto. Siempre coloco imágenes / iconos / audio, etc. en "Recursos".
En resumen, si le gusta que lo que está en la carpeta del proyecto sea aproximadamente igual a lo que está en su proyecto, siempre agregue los archivos existentes eligiendo "copiar elementos a la carpeta del grupo de destino"
La flexibilidad en XCode es intencional. Depende de usted decidir cómo le gusta organizar las cosas.
Sería fantástico si Xcode pudiera mantener sincronizados a sí mismo y al sistema de archivos. Lamentablemente no es así. Una razón para quererlo es que la jerarquía en su SCCS coincida con la de Xcode.
Me vuelvo a mantener las cosas organizadas en Xcode, y dejando el sistema de archivos separado en poco más que "Clases" y "Recursos".
Siento que usted y personalmente no puede preocuparse por la estructura real y solo confiar en los espacios de trabajo.
lo que sería realmente genial es una herramienta que revisará la estructura del espacio de trabajo y reorganizará el sistema de archivos en consecuencia, cuidando cualquier renombrado de carpetas, etc. Esta sería una solución clásica y en mi humilde opinión debería implementarse como una opción. Reorganizamos nuestro proyecto a medida que avanzamos.
algunos problemas podrían ser el control de fuente aunque xcode4 funciona tanto con git como con SVN.
También deseo que Xcode se mantenga automáticamente sincronizado con el sistema de archivos.
Tanto es así, que pasé una hora haciéndolo manualmente para un proyecto llamado acani-iphone en GitHub . Básicamente, acabo de mover algunos de los archivos con Finder, creando nuevas carpetas a mi antojo. Luego, cambié de nuevo a Xcode y vi que los archivos que acababa de mover ahora eran rojos (porque Xcode estaba pensando que estaban donde los moví y no los pude encontrar).
ACTUALIZACIÓN: Acabo de descubrir que podría haber hecho clic en el grupo o archivo rojo, presioné CMD + i (Obtener información en el menú contextual, que puede abrir haciendo clic con el botón derecho en el archivo o grupo rojo), y en la pestaña General, haga clic en Elegir, luego encuentre el lugar donde moví el archivo en el sistema de archivos. Pero, no hice eso, esto es lo que hice en su lugar, que también funciona:
Luego, simplemente destaqué todos los archivos rojos en Xcode y presioné command + delete
para eliminar las referencias rotas (rojas). Luego, hice clic con el botón derecho en el grupo al que quería agregar los archivos (generalmente el mismo grupo) y luego hice clic en Add
> Existing Files...
Luego, encontré los mismos archivos en el nuevo lugar en el sistema de archivos. Guardé "Copiar elementos en la carpeta del grupo de destino (si es necesario)" sin marcar, marqué el botón de opción "Crear recursivamente grupos para cualquier carpeta agregada" y comprobé agregar al objetivo acani si los archivos que estaba agregando estaban siendo utilizados para construir el Aplicación para iPhone acani.
Hice lo anterior con un directorio de archivos a la vez. Algunas veces fui más agresivo y agregué varios directorios a la vez, ya que casi siempre selecciono el botón de opción "Crear recursivamente grupos para cualquier carpeta agregada".
Descubrí que los archivos acani_Prefix.pch
y acani-Info.plist
tenían que permanecer en el directorio del sistema de archivos raíz (aunque puede haber configuraciones que pueda configurar para permitir que estos archivos estén en otra parte, como creo que puede agregar una línea a acani-Info.plist
para que pueda mover / renombrar acani_Prefix.pch
, pero estoy de acuerdo con ellos en el directorio raíz en el sistema de archivos.
Eso fue molesto de hacer, y tal vez ni siquiera valga la pena, tal vez la procrastinación, pero en el futuro, antes de agregar archivos existentes a Xcode, primero me aseguraré de que estén en el lugar donde quiero que estén en el sistema de archivos.
Use Synx .
Reordena sus archivos en el disco para que coincidan con sus grupos de Xcode. Intento ejecutarlo antes de confirmar cualquier código que cambie los grupos de Xcode, y mantiene el proyecto ordenado y ordenado.