notes apple app iphone objective-c ios xcode

iphone - apple - organización directorio del proyecto IOS



objective-c xcode (2)

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

Personalmente, todavía agrego un directorio llamado / Recursos que contiene subdirectorios como / Fuentes, / Imágenes, / Iconos, 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 vaya a mi grupo "Imágenes" en Xcode y agregue el archivo desde allí.

Una vez intenté usar la opción "Referencias de carpeta" para mantener sincronizados Xcode y Finder, pero IB no pudo obtener las imágenes ...

Además, ¿su Icon.png y Default.png están en la raíz de su proyecto? (es decir, con el archivo .xcodeproj?) Cuando usa Xcode 4 (en información del proyecto> resumen), los agregan allí ... Se preguntan 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? ¿Los coloca también en el directorio raíz (también con el archivo .xcodeproj)?


He estado pensando mucho en esto últimamente; Aquí está la estructura que 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 explicación completa de la estructura, echa un vistazo a esta entrada de blog .

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


Sugiero mantener todos sus archivos .m y .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 de la estructura de carpetas virtuales dentro de Xcode cuando refactorizas tu proyecto.

Mantenga las bibliotecas o los 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, Modelos y Nibs (y Bibliotecas para cosas de terceros). Si se trata de un proyecto grande, lo divido en carpetas para cada componente y luego las divido en vistas, controladores, etc., pero nuevamente, eso es solo carpetas virtuales, no físicas.

Mantener los recursos en una carpeta física separada es una buena idea para facilitar la navegación en el disco. Puede tener sentido dividirlos en imágenes, sonidos, xml, etc. Dentro de Xcode es posible que desee dividirlos en subcarpetas virtuales por componente o categoría (interfaz, contenido, etc.) pero no sugerirí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 porque evita que accidentalmente le dé a dos imágenes el mismo nombre. Xcode no te advertirá si importas dos imágenes con el mismo nombre desde diferentes lugares, pero cuando compile la aplicación, terminarás con solo una o la otra, elegidas al azar.

No es necesario mantener Default.png e Icon.png en la raíz (o incluso llamarlos Default.png e Icon.png), pero a veces Xcode se confunde si los archivos estándar no son los esperados.

Y sí, haga lo que haga, no intente usar 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. Utilice 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 su contenido va 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 cuando los cargue, por ejemplo

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