2012-01-15 8 views
24

Solo una pregunta/opinión rápida sobre cómo organizar el directorio Xcode 4 para cada una de las aplicaciones iOS que cree.Organización de directorio de proyectos iOS

Personalmente, sigo agregando un directorio llamado/Resources que contiene subdirectorios como/Fonts,/Images,/Icons, etc. Utilizo la opción "Copiar elementos a la carpeta del grupo de destino (si es necesario)". Si necesito agregar un nuevo recurso, simplemente lo agrego al directorio correcto en finder.app en el directorio de mi proyecto (es decir, si es una imagen, lo agrego a MyProject/Resources/Images/Foo.png) y luego simplemente ve a mi grupo "Imágenes" en Xcode y agrega el archivo desde allí.

una vez que trataron de utilizar "referencias de carpeta" opción para mantener Xcode y el Finder en sincronía, pero IB no fue capaz de obtener las imágenes ...

Además, es su Icon.png y en Default.png la raíz de tu proyecto? (es decir, con el archivo .xcodeproj?) Cuando utiliza Xcode 4 (en información del proyecto> resumen) los agregan allí ... Se pregunta si los mantiene allí, porque personalmente siempre prefiero tener todas mis imágenes en un directorio de muestra.

¿Y qué pasa con los archivos de Photoshop o cualquier otro archivo relacionado con su proyecto, también los coloca en el directorio raíz (de nuevo con el archivo .xcodeproj)?

+0

Creo que depende totalmente de usted dónde tiene que guardarlo, sus instrucciones o reglas para la estructura de directorios. – rishi

+0

Sé que no hay reglas "estrictas" al respecto, me pregunto cómo las personas estructuran sus proyectos, eso es :) – allaire

+1

puede consultar el siguiente tema del foro de iphone sdk también - http://www.iphonedevsdk.com /forum/iphone-sdk-development/6457-xcode-folder-directories.html – rishi

Respuesta

25

Sugiero que guarde todos sus archivos .my .h y .xib en una sola carpeta porque simplifica la localización de cadenas cuando ejecuta ibtool para extraer todas las referencias de NSLocalizedString, y también hace que sea más fácil mover archivos alrededor del int. estructura de carpetas virtuales dentro de Xcode cuando refactoriza su proyecto.

Mantenga bibliotecas o marcos de terceros en una carpeta separada para evitar mezclarlos con su propio código.

Dentro de Xcode, organizo estos archivos de clase en carpetas virtuales separadas llamadas Vistas, Controladores, Modelo y Nibs (y Bibliotecas para cosas de terceros). Si se trata de un proyecto grande, lo descompongo en carpetas para cada componente y luego los divido en vistas, controladores, etc., pero de nuevo solo son carpetas virtuales, no físicas.

Mantener los recursos en una carpeta física separada es una buena idea solo para que sea más fácil navegarlos en el disco. Puede tener sentido dividirlos en imágenes, sonidos, xml, etc. Dentro de Xcode puede dividirlos en subcarpetas virtuales por componente o categoría (interfaz, contenido, etc.), pero no recomendaría hacerlo en el disco como hace que sea más difícil refactorizar la estructura de su carpeta a medida que su proyecto crece.

Es una muy buena idea mantener todas sus imágenes en la misma carpeta, ya que evita accidentalmente dar dos imágenes con el mismo nombre. Xcode no te advertirá si importas dos imágenes con el mismo nombre de diferentes lugares, pero cuando construya la aplicación terminarás con una u otra, elegidas al azar.

No tiene que mantener Default.png e Icon.png en la raíz (ni siquiera llamarlos Default.png e Icon.png), pero a veces Xcode se confunde si los archivos estándar no están donde espera.

Y sí, haga lo que haga, no intente utilizar las referencias de la carpeta azul cuando importe imágenes; de lo contrario, no podrá acceder a ellas desde su código con imageNamed: o dentro de Interface Builder. Use las referencias de la carpeta virtual amarilla en su lugar. Básicamente, las carpetas azules se copian en el paquete de la aplicación como carpetas reales cuando se crea la aplicación, mientras que las carpetas amarillas se ignoran y sus contenidos van directamente a la raíz del paquete de la aplicación. Para acceder al contenido de las carpetas azules, deberá incluir los nombres de las carpetas azules en la ruta al cargarlas, p. Ej.

NSString *path = [[NSBundle mainBundle] pathForResource:@"image" ofType:@"png" inDirectory:@"nameOfBlueFolderInXcode"]; 
UIImage *image = [UIImage imageWithContentsOfFile:path]; 
+1

Acepto, excepto por "mantener todos sus archivos .m, .h y .xib en una sola carpeta ". ¡Eso me volvería loco sin tener estructura en mi repositorio svn! Pero a cada cual lo suyo. – chown

+0

Bueno, si usas svn, sabes cuán doloroso es mover archivos entre carpetas en un proyecto alojado en svn. La cantidad de esfuerzo que supone mover una subclase de UIButton personalizada, digamos classes/somecomponent/views/a classes/shared/views como parte de un proceso de refactorización sin romper los enlaces locales y el repositorio svn me pondría fuera de la refactorización, y cualquier cosa que hace buenas prácticas, el trabajo duro es una mala idea, ¿eh? –

+0

Además, tenga en cuenta mi punto sobre la generación de su archivo localizable.strings usando ibtool. ibtool es una herramienta de línea de comandos que toma una ruta de carpeta y genera un único archivo de cadenas de todas las clases internas. No busca subcarpetas, por lo que si las clases no están todas en una carpeta, la localización será mucho más complicada. –

9

He estado pensando en esto mucho últimamente; aquí está la estructura decidí ir con:

ProjectName 
ProjectName/Assets 
ProjectName/Assets/Images 
ProjectName/Frameworks 
ProjectName/Logic 
ProjectName/Logic/Models 
ProjectName/Presentation 
ProjectName/Presentation/ViewControllers 
ProjectName/Presentation/Views 

creo que esto da una buena estructura para el crecimiento y proporciona un hogar razonable para casi cualquier cosa. Por supuesto, agregue subcarpetas adicionales (por ejemplo, Assets/Fonts) según sea necesario. Para mi razonamiento completo para la estructura echa un vistazo a this blog post.

Guardo cosas como Icon.png y Default.png en la raíz del proyecto ya que Xcode parece quisquilloso al respecto, pero por lo demás las cosas están perfectamente organizadas. Mantengo mis archivos correspondientes .m, .h y .xib juntos, pero divido los controladores de vista lógicamente en subcarpetas por función (por ejemplo, Initial, Settings).

Cuestiones relacionadas