¿Cómo debo estructurar mi aplicación iOS?

¡Buena pregunta!

Como primer principio, siempre he organizado los archivos de mi aplicación en Xcode por funcionalidad .

Mira la captura de pantalla a continuación:

En la parte superior, puede ver dos archivos:

  • Constants.swift, que contiene estructuras para todas las constantes estáticas utilizadas en la aplicación como “https://example.com/api” para la ubicación de la API REST.
  • AppDelegate.swift, el punto de partida de su aplicación, ubicado lógicamente en la parte superior de la estructura de carpetas.

Luego está la carpeta API. No es parte de la interfaz de usuario, y no lo uso en todas las aplicaciones, porque estos archivos contienen código modular para trabajar con API. En esta aplicación en particular, hay una API para trabajar con el servicio REST y una API para trabajar con la base de datos local de Realm. Dicha API va entre el código de la IU y el código REST / Realm real, por lo que puedo llamar a métodos como “getArticlesWithCategory (category :)” desde la IU sin tener que escribir el código específico del Reino (como tratar con transacciones y manejo de errores). La carpeta API contiene una subcarpeta con Modelos (específicos del Reino), porque están estrechamente relacionados con las API mismas.

Luego, casi todas las demás carpetas son interfaces de usuario específicas. Cada interfaz de usuario tiene su propio archivo de clase Swift y un XIB. Cualquier interfaz de usuario que forme parte de otra interfaz de usuario, como el “Controlador de permisos de inserción” que forma parte del “Controlador de vista de artículo”, se estructura como una subcarpeta.

Llevo casi 8 años codificando aplicaciones y todavía estoy trabajando con XIB individuales en Storyboards repletos. Interface Builder ha tenido errores recientemente, por lo que trato de mantener baja la carga en mi sistema trabajando con XIB individuales. Además de la comodidad, los Storyboards no me ofrecen mucho, por lo que es igual de fácil trabajar con combos Swift / XIB.

Luego, cuanto más bajo llegue a la lista, más “generales” se volverán las clases. Hay una subclase para la barra de pestañas, una subclase para el controlador de navegación y un Controlador de vista de menú, en la aplicación que es un menú de hamburguesas, siempre presente, que tiene una subcarpeta para una celda de vista de tabla personalizada.

En los “Archivos de soporte” puede ver algunos subdirectorios, por ejemplo, extensiones. Si recuerdo correctamente, no podría usar CocoaPods para SWRevealController en ese momento, por eso se incluye como código fuente. No se muestra en la imagen, pero el proyecto que está viendo está dentro de un espacio de trabajo junto con el típico proyecto generado por CocoaPods.

Entonces, para resumir:

  • Organice clases y XIB por funcionalidad, anidados por subfuncionalidad o sub-IU.
  • El código similar a un marco que no es UI tiene sus propias carpetas, como API.
  • Las modelos tienen sus propias carpetas.
  • El código genérico de la interfaz de usuario, como la subclase UINavigationController, va más abajo en la lista de carpetas de la interfaz de usuario.
  • Los archivos de soporte, como extensiones, utilidades y bibliotecas no controladas por la fuente van en su propia carpeta.

Para responder a sus preguntas adicionales:

  • Pondría una vista personalizada junto a donde se usa, por ejemplo, con una celda de vista de tabla personalizada. Si realmente está haciendo algo genérico que no pertenece a una interfaz de usuario en particular, o se usa en varios lugares, le daría su propia subcarpeta en una carpeta de soporte. Sin embargo, tenga en cuenta que, dado que da la impresión de modularidad con dicha estructura, no debe acoplar la vista personalizada con ninguna parte de su aplicación.
  • Veo que MVVM te confunde. Xcode, y el desarrollo de iOS, es Model-View-Controller (MVC) por defecto. Un modelo de vista generalmente vincula las propiedades de un modelo a la interfaz de usuario de una vista. Es popularizado por marcos como Angular o React, que tienen un enfoque completamente diferente de MVC. En cuanto al desarrollo de iOS, para usar MVVM, colocaría un ViewModel entre el Modelo y el Controlador de Vista, y lo usaría para (re) presentar los datos del Modelo al ViewController. Puede usar MVVM para separar mejor la lógica de decisión y la lógica de representación. He incluido un buen artículo al final de mi publicación de respuestas.
  • Core Data normalmente no genera un ViewModel, genera clases de Modelo basadas en las propiedades que crea en sus archivos de Modelo. He descubierto que Core Data es lento y confuso, así que me mudé a Realm como mi marco de datos predeterminado hace mucho tiempo. ¡Deberías probarlo! Es más fácil trabajar con él, tiene un código más limpio y está estrechamente relacionado con sus clases de datos Swift comunes (en lugar de ese gigante de un NSManagedObject).
  • Cuando se trata de marcos, evitaría escribir sus propios marcos si recién está comenzando. Hazlo por diversión, pero no intentes reinventar la rueda en un entorno de producción. Úselo para descubrir la mecánica de otros marcos y cómo toman decisiones. Cuando usa un bloque de código o mecanismo en particular, repetidamente en su código, lo pongo en una extensión, marco pequeño o clase de utilidad para que no se repita (principio DRY). Practique desacoplando su código, es decir, para no enredar todas las clases entre sí.

¡Feliz codificación!

Realm: Documentación de la plataforma móvil de Realm

MVVM: Introducción a MVVM

Esto es lo que hago. He estado haciendo esto durante varios años y funcionó bastante bien. Notaré que estos no son solo grupos, son ESTRUCTURA DE ARCHIVO REAL. Me vuelvo incoherente con la ira cuando veo un gran proyecto que tiene todos los archivos en un solo directorio. (Probablemente debería ser evidente que todo esto debería estar bajo el control de la fuente, pero lo diré de todos modos … póngalo en control de la fuente).

  • Framedación /
  • Datos/
  • DataStack1
  • DataStack2
  • etc.
  • Red/
    • NetworkRouter
    • etc.
  • Util /
    • extensiones de base, clases auxiliares
  • Lib /
    • Biblioteca externa 1
    • Biblioteca externa 2
  • Storyboards /
    • Tab1.storyboard
    • Tab2.storyboard
  • UI /
    • Tab1 (o Área de funcionalidad 1) /
    • ViewController1
    • ViewController2
    • Puntos de vista/
  • Tab2 (o Área de funcionalidad 2) /
    • ViewController1
    • ViewController2
    • Puntos de vista/
  • Común/
    • SharedUIComponent1
    • SharedUIComponent2
  • Util /
    • Extensiones de clases de cacao
    • Ayudante de colores
    • Ayudante de fuentes
    • etc.
  • Recursos /
    • Fuentes /
    • Imágenes de marcador de posición (las imágenes finales van al archivo .XCAssets)
    • etc.

    Asi que…

    Framedación

    Este es el término para el back-end de la aplicación. Creo que es MUY importante separar el extremo frontal del extremo posterior. Los controladores siempre llaman a algo en Framedation, y no directamente a la red o recursos de datos, y siempre se ocupa de objetos completamente formados. ¿Por qué “Framedación”? Porque las palabras “Framework” y “Foundation” ya están sobrecargadas en el desarrollo de iOS.

    Dentro de Framedation, hay

    • directorios separados para cada tipo de datos que se administran (generalmente un singleton DataManager y una colección de clases de objetos).
    • Un directorio para todo el código de red.
    • Un directorio para cualquier extensión u otras clases auxiliares de datos / backend

    Storyboards

    Directorio plano simple para la colección de guiones gráficos. Los hace fáciles de encontrar.

    Lib

    Cada biblioteca externa obtiene una carpeta aquí. Muchas veces es más fácil incluirlo de esta manera (especialmente si requiere cambios) que hacer un enlace con CocoaPods o Carthage

    UI

    Cada área de la aplicación obtiene su propia carpeta. Esto podría ser por pestaña o por otro “concepto” de IU de alto nivel. Dentro de la carpeta hay los controladores de vista apropiados y una subcarpeta para todas las vistas personalizadas. Si hay MUCHAS vistas, la carpeta Vistas podría desglosarse aún más

    También hay una carpeta común. Cualquier componente de la interfaz de usuario que se use en más de una carpeta de la interfaz de usuario se promociona a Común. Común se organiza aún más cuando se hace grande.

    La carpeta UI / Util es para cosas como un administrador de color, un administrador de fuentes y extensiones para las clases de Cocoa.

    Recursos

    Aquí es donde viven las fuentes. También puede contener cosas como tablas de cadenas para localización e imágenes de marcador de posición durante el desarrollo (las imágenes finales están todas en conjuntos XCA, pero ese archivo puede ser corpulento, por lo que es bueno tener cosas de marcador de posición aquí para que sepa eliminarlo)


    Taaaan

    No sé si esto funcionará bien para usted o no, pero ha funcionado bastante bien para mí (con algunas variaciones menores) durante muchos años, y muchos de los ingenieros con los que he trabajado han adoptado algo bastante similar (tal vez porque soy insistente)

    Buena pregunta. En los últimos 4 años de desarrollo de iOS, he usado varias formas de organizar el código. Sugeriría que mire el código de muestra proporcionado por Apple y vea cómo está estructurado. Puede ver las aplicaciones de código abierto y ver cómo están estructuradas también.

    ¿Estás trabajando solo o en equipo? Lo más probable es que incluso si está trabajando solo y su aplicación es exitosa, tendrá más miembros del equipo.

    Si la aplicación es lo suficientemente grande, aprenda sobre arquitecturas empresariales como @Architecting iOS Apps with VIPER (aunque es algo nuevo pero le dará una idea sobre cómo estructurar la aplicación).

    Además, en lugar de carpetas, piense en las unidades lógicas. Por ejemplo, hice la arquitectura para una aplicación de revista digital y así es como se veía:

    Ahora, en este punto, realmente no importa cómo se gestionen las carpetas, pero me gusta dividir esto funcionalmente. Aquí hay otra estructura de una aplicación en la que estoy trabajando (una aplicación más pequeña relacionada con la salud)


    Puede encontrar el código fuente @ zakishaheen / oneweek-ios.

    Puede ver que la estructura está más en un nivel funcional (también, observe la segregación de los guiones gráficos).

    Envíame un mensaje si quieres una consulta más profunda y puedo ayudarte con eso.

    Por carpeta, supongo que te refieres a Grupos en Xcode. Tenga en cuenta que los grupos que cree no existirán realmente en el sistema de archivos. Son únicamente para fines organizativos en el contexto de su proyecto, con la excepción de cosas como .xcassets, .momd y algunas otras cosas de Xcode.

    Dicho esto, uso grupos para mantener las cosas juntas, para que sean más fáciles de encontrar. Los uso en 2 casos:

    1. si tiene muchas clases, como por ejemplo en un proyecto, tuve 10 ViewControllers diferentes, incluido un controlador de vista principal del que heredaron los hijos. Simplemente se hizo demasiado difícil escanear a través del Navegador de proyectos y encontrar rápidamente el que estaba buscando. Fue mucho más fácil poner los controladores de vista en un grupo. Lo mismo ocurre con los objetos personalizados.

    y 2. Recursos que no son clases. Cosas como películas, imágenes, sonidos, archivos plist, etc. Por lo general, no tiene que tocarlos una vez que se agregan a un proyecto, por lo que es útil ponerlos en un grupo solo para quitarlos del camino.

    En cuanto a sus preguntas adicionales, diría

    1. ¿Qué debe haber en cada grupo? Yo supongo

    Ver controladores: obviamente tiene UIViewControllers
    Vistas: probablemente sean UIViews personalizadas, es decir, barras de estado, botones personalizados, etc.
    Ver modelos: en el patrón de diseño Modelo-Vista-Controlador, el modelo es más o menos los datos que impulsan la vista. Entonces, supongo que estos serían elementos relacionados con el procesamiento de datos para las vistas, la lógica, las clases, etc.
    IU: podrían ser guiones gráficos, pero también podrían ser controles personalizados y gráficos relacionados (es decir, un UIButton personalizado).

    2. Ver modelos: recomendaría examinar el patrón de diseño Modelo-Vista-Controlador para tener una idea del modelo. (y luego tirarlo porque nadie se apega estrictamente al patrón MVC). La esencia básica de esto es que tiene sentido separar los datos de la presentación de los datos, porque entonces puede cambiar uno u otro más fácilmente, sin afectar al otro. Si está utilizando datos básicos, ya está utilizando MVC en cierto sentido porque la lógica que dicta cómo accede a la base de datos está separada en clases NSManagedObject.

    3. Marcos: utilizaría un marco si desea reutilizar el código en todos los proyectos, y especialmente si desea que otros reutilicen su código. La ventaja de un marco es que puede importarlo (a diferencia de lo que hace la mayoría de la gente, que es pensar en un proyecto anterior en el que utilizó ese código, abrirlo, encontrar el código, copiarlo, pegarlo y adaptarlo a su actual proyecto.). Eso está perfectamente bien si eres un programador en solitario. Si está trabajando en un equipo, eso es prácticamente imposible, por lo que el código reutilizable debe agruparse en algún lugar. Un marco es solo un paquete de código reutilizable que está organizado y documentado (con suerte).

    La mayoría de los desarrolladores recurrirán a la solución ingenua para modelar la estructura del proyecto similar al patrón MVC de Apple:

    1. Puntos de vista
    2. Controladores
    3. Modelos / Datos.

    También puede ver algunas carpetas de Utilidades / Servicios / Infra, Recursos y Terceros.

    La estructura del proyecto debería ayudarlo a encontrar lo que está buscando rápidamente y tener un sentido contextual. Una de las pruebas si este es un buen arreglo es cuando realiza la limpieza. Las limpiezas generalmente van por características / contexto, por lo que en la sugerencia anterior es menos claro encontrar todos los archivos que necesita.

    Realmente depende del propósito de la aplicación / marco, pero generalmente sugiero usar una disposición orientada a funciones:

    En el nivel más alto tenemos:

    Servicios

    Infraestructura

    Características -> Si bien cada característica tiene sus subcarpetas Datos, Controlador y Vistas

    Recursos. -> Agregado en activos con carpetas por característica.

    Terceros

    Si una nueva función utiliza un servicio / vista / controlador que utilizó una función anterior -> Eso lo llevará a extraer el código mutuo y moverlo a Infra / Servicios.

    De esta forma, se benefician tanto los componentes reutilizados como el contexto de características. arreglos

    Hola aqui

    ¡Muchas gracias por plantear una pregunta sugerente sobre la estructura de la aplicación iOS!

    Primero y ante todo, no hay una respuesta definitiva sobre cómo debe hacer esto. Cada proyecto es único, por lo que cada proyecto tiene un patrón de diseño de software diferente para ser aplicado.

    Los principales patrones de diseño de software en estos días son los siguientes 4:

    • MVC
    • MVP
    • MVVM
    • VIPER (para el desarrollo de iOS principalmente)

    Entonces, en la compañía para la que trabajo, Mind Studios: Compañía de desarrollo de aplicaciones móviles, utilizamos varios patrones de diseño: MVC, MVP, MVVM y, más recientemente, cada vez más nuestros próximos proyectos se están construyendo sobre VIPER.

    Acabo de escribir y publicar un nuevo material sobre el tema MVP vs MVC vs MVVM vs VIPER. ¿Qué es mejor para el desarrollo de iOS? – Mind Studios

    Y mientras investigaba este material en paralelo con nuestro equipo de desarrollo de iOS, llegué a la conclusión de que no hay un patrón de diseño “universal” que pueda usar para cada proyecto en el que empiece a trabajar, ya que todos varían, todos de ellos tienen sus propios pros y contras que primero debe tener en cuenta.

    Por ejemplo, una breve comparación de los patrones MVP vs MVC incluiría los siguientes puntos:

    Modelo MVP

    La vista está más unida al modelo. El presentador es responsable de vincular el modelo a la vista.

    Prueba de unidad más fácil porque la interacción con la vista es a través de una interfaz.

    Por lo general, Ver al presentador = mapa uno a uno. Las vistas complejas pueden tener presentadores múltiples.

    Patrón MVC

    Los controladores se basan en comportamientos y se pueden compartir entre vistas

    Puede ser responsable de determinar qué vista mostrar [Fuente: Infragistics]

    Le invitamos a descubrir más en nuestro artículo MVP vs MVC vs MVVM vs VIPER. ¿Qué es mejor para el desarrollo de iOS? – Mind Studios

    Es cierto, la respuesta de Abishek Sheth es la mejor que también se ajusta a mí.
    He estado usando uno similar para mis proyectos.

    Pero después de pasar por este hilo y algunos otros, decidí clasificar algunos tipos en una nueva interfaz de usuario de código de carpeta.

    Podría cambiar un poco la estructura de sus archivos de la aplicación y fusionar la mía y el uso. 🙂

    • Modelos
    • UI
    • Puntos de vista
    • Controladores
    • Si uso archivos Nib (.Xib) , deberían aparecer debajo de este o de los guiones gráficos
  • Aplicación (archivo de configuración con constantes, AppDelegate)
  • Recursos (Todos los recursos como Imágenes, Fuentes personalizadas, Archivos de audio con cada uno en diferentes subcarpetas)
  • Servicios
  • Ayudantes / Utilidades
  • Bibliotecas
  • Pero si usa MVVM para sus aplicaciones, ¡personalícelo y utilícelo!

    ¡Aclamaciones!

    Hace unos meses, decidí desarrollar una aplicación de iOS para uno de mis viejos dispositivos y estoy muy contento con la forma en que resultó. El objetivo general de mi pensamiento era proporcionar una experiencia de cliente atractiva, llegar a más usuarios potenciales y, lo más importante, actualizar la marca con un nuevo diseño de aplicación. Anteriormente, se desarrolló con la ayuda de soluciones multiplataforma. Esta vez, yo como DESARROLLADOR DE APLICACIONES IPHONE PARA CONTRATAR pensé que iría con Swift como el idioma principal.

    Desarrollo de aplicaciones iOS. Es innecesario decir que la estructura del proyecto tiene una gravedad irrefutable al considerar el desarrollo de una aplicación para iOS. Sabía que si tenía una buena estructura de proyecto, podría encontrar fácilmente las clases, los recursos y otra información. Aquí esta lo que hice:

    Había tres carpetas en la carpeta raíz:

    1. ci – carpeta

      En esta carpeta, utilicé el software Bamboo para una integración constante y Gitlab como la versión para el sistema de control. Con tres entornos: prueba, preparación y producción, puse en marcha el proceso de desarrollo. El primer paso fue probar seguido por el segundo que incluyó la puesta en escena para finalizar las versiones. El paso final fue el proceso de producción junto con las API para la App Store. También decidí usar el bot de Telegram para las notificaciones. Siempre me aseguré de informar a los evaluadores cada vez que construía una versión más nueva. Además, utilicé mi propio servidor para distribuir la aplicación para probar por aire.

    2. La carpeta principal para el proyecto Xcode es TestProject

      Para el desarrollo de aplicaciones iOS , utilicé un administrador de dependencias llamado CocoaPods. Todo lo que necesita hacer es comenzar el proyecto con el comando ‘pod init’ seguido por el proceso de agregar dependencias a Podfile. Después de esto, instalé CocoaPods y descargué la biblioteca. Bueno, eso fue todo! Sin embargo, debe abrir el archivo * .xcworkspace para editar y ejecutar el proyecto. Otras carpetas que se utilizaron fueron Archivos de soporte, Controles personalizados, Modelos, Recursos, Escenas, Proveedores, Trabajadores.
      En los archivos de soporte, acabo de tener el archivo AppDelegate e Info.plist.
      Como su nombre lo indica, utilicé las carpetas de controles personalizados para elementos personalizados. Sin embargo, será difícil copiarlos, pegarlos y usarlos. Entonces, traté de convertirlos en módulos para copiar y pegar fácilmente y luego usarlos. Además, tenía tres carpetas más como celdas, vistas y extensión.

    3. Carpeta de modelos

      Bueno, para ser sincero, no hay mucho que hablar sobre esta carpeta. Acabo de usar esta carpeta para almacenar modelos utilizados para la aplicación.

    4. Carpeta de recursos

      Storyboards y Assets son las dos carpetas dentro de esta carpeta. Sin embargo, si lo desea, puede guardar más carpetas aquí para videos, fuentes y muchos más. Tuve éxito al dividir los guiones gráficos, la configuración de la cuenta, los activos de imagen y otros elementos relacionados.
      Si necesita separar la carpeta de escenas, debe usar módulos lógicos, lo cual hice. Además, tenga en cuenta que para descargar la carpeta del módulo, debe tener escenas para cada UIViewController individual.

    5. Carpeta de trabajadores

      Desde esta carpeta, los datos se distribuyen desde la base de datos. Cualquier lógica que tenga modelos funciona bien aquí y es por eso que considero esto como mi carpeta ‘lógica’. También puede mantener subcarpetas aquí, como Helpers, Network Layer, etc.

    6. Carpeta de herramientas

      La carpeta de herramientas consta de scripts y ayuda a los recursos. En esta carpeta, tenía secuencias de comandos necesarias para localizaciones, perfiles de certificados y perfiles para aprovisionamiento. En la carpeta de herramientas, había guardado los íconos necesarios para la App Store. Como quería probar las solicitudes del servidor, las secuencias de comandos para la localización ayudaron a validar las cadenas de localización, además de ayudar a localizar cadenas no localizadas . También mantuve una carpeta, llamada archivo de pata que ayudó a probar las solicitudes del servidor

    Entonces, así es como HokuApps: la mejor COMPAÑÍA DE DESARROLLO DE APLICACIONES IPHONE, estructuró nuestro proyecto de desarrollo de aplicaciones iOS.

    Todos usarán una estructura ligeramente diferente según las necesidades de la aplicación en sí y sus propias preferencias. No creo que haya una forma correcta de hacerlo, pero para el registro, un nuevo proyecto mío se vería así:

    – Modelos
    – ViewControllers
    – Puntos de vista
    (Las cosas relacionadas con la aplicación como AppDelegate van en la carpeta raíz).
    Para los activos, solo agrego un “Catálogo de activos” y agrego todo allí, que actúa como una carpeta separada.

    No tengo nada para los guiones gráficos, ya que simplemente no los uso.

    La forma en que organiza sus archivos es de poca relevancia siempre que tenga sentido para usted. Una cosa que le recomiendo encarecidamente que use y que ayude mucho con la organización / administración de bibliotecas de terceros es Cocoa Pods. Esa es probablemente la utilidad más importante que DEBE obtener y que le ahorrará un mundo de problemas.

    como parte de mi método de trabajo, creo una estructura de carpeta como:

    -HelperClass (contiene las clases de terceros)
    -AppDelegateClass (AppDelegateClass)
    -StoryBoard (contiene storyBoards)
    -ViewControllers–> Carpeta diferente según sea necesario en la carpeta del controlador de vista lateral
    -ConstantClass
    -Imágenes (AppIcons, temp, y dependiente de UI createFolder)

    1. Utilice el control de versiones!
    Use Subversion o Git o algo para administrar su proyecto. De esta manera puede realizar un seguimiento de todos sus cambios. Retroceda si rompe algo y colabore con otros. Solo el check-in cambia si su versión es mejor que la anterior. No registre características a medio escribir o código roto. No use el check in como respaldo. Use una solución de respaldo para eso.
    Utilizo ejecutar un servidor Subversion en una Mac Mini, y uso Cornerstone y XCode en el cliente.

    2. Coloque todos los activos del proyecto debajo de un solo directorio.
    El 100% de todo lo relacionado con el proyecto debe estar dentro de este directorio.
    Tengo dos subdirectorios dentro de esto.
    Uno es el directorio del proyecto XCode.
    El segundo es uno que guardo para todo lo demás. Trabajo de diseño y documentación, archivos PSD para diseños, material de referencia, artículos, etc.
    Ambos están bajo control de versiones.

    3. Organice la jerarquía del proyecto XCode de una manera que tenga sentido para usted.
    No hay una sola forma correcta. Y el proyecto individual puede necesitar diferentes estrategias. El objetivo es poder encontrar archivos rápidamente, por lo que una jerarquía organizacional tiene sentido.

    * Delegado de aplicaciones y otros elementos esenciales
    Tiendo a tener una sola carpeta para AppDelegate y main. Me gustan estos en la parte superior porque implica que aquí es donde comienza la aplicación. Pero la carpeta significa que están ocultos y rara vez necesito mirarlos.

    * Ver controladores
    Organizado por una orden relacionada con la aplicación. Con el punto de entrada en la parte superior y los controladores secundarios debajo.

    * Modelos
    Una carpeta para representaciones de datos.
    En una aplicación complicada, esto podría tener subcarpetas.

    * Activos
    Una carpeta para activos, que contendrá el guión gráfico, catálogos de activos, audio, video, etc.

    Generalmente tengo la siguiente estructura de carpetas en mi aplicación,

    – Modelos (todos los modelos de datos y entidades)
    – Vistas (todas las vistas personalizadas)
    – Controladores (todos los controladores de vista con su categoría como subcarpetas)
    – Aplicación (Todos los archivos relacionados con la aplicación + Delegados de la aplicación + Guiones gráficos)
    – Recursos (Todos los recursos como Imágenes, Fuentes personalizadas, Archivos de audio con cada uno en diferentes subcarpetas)
    – Servicios (Todos los servicios / singletons para llamadas API, etc.)
    – Biblioteca (todas esas clases que no se incluyen en MVC, como archivos de configuración, clases de ayuda, categorías, etc. con cada una en diferentes subcarpetas).

    Esperando que esto lo ayude a comprender mejor la arquitectura del proyecto.

    Contestaré “2) ¿Sería necesario ver los modelos si usa datos básicos? ¿Qué datos básicos generan sus” modelos de vista “?”

    El uso de “ver modelos” es un patrón de diseño diferente de Model-View-Controller. Los modelos de vista son representativos de MVVM, cuyo propósito es incrustar enlaces de datos en Core Data. Hay un blog aquí que describe MVVM aquí: Model-View-ViewModel para iOS. Tanto MVC como MVVM se pueden usar con Core Data. No soy fanático de MVVM.

    Lo que Core Data puede producir son clases de modelo y acceso a sus datos subyacentes (SQLite, archivo JSON, etc.). El término “ver modelo” a medida que lo usa muestra cierta confusión, ya que ese no es el término estándar de Core Data, es un término MVVM.

    Mi recomendación sería entender realmente Core Data como MVC y seguir el enfoque de Apple. Usar MVVM, que generalmente implica adoptar ReactiveCocoa o ActiveRecord o un marco similar de terceros (generalmente CocoaPods). En WWDC, hay una larga lista de desarrolladores que preguntan a los ingenieros de Core Data por qué sus herramientas de terceros tienen errores y no funcionan. Eso es vergonzoso. Agregar código de terceros con errores no resuelve sus problemas. Simplemente tiene nuevos problemas y aún no entenderá CoreData.

    También puedo recomendar un libro, Core Data de Marcus Zarra: The Pragmatic Bookshelf | Datos centrales

    Hace 1 o 2 años probablemente usaría una combinación de sugerencias de las otras respuestas, pero ahora de ninguna manera, VIPER es el camino. Hay una gran charla del tío Bob sobre esto y estoy tratando de seguir sus sugerencias, pero aquí hay un artículo Arquitectura gritando | Octava luz

    Debe comprender desde la estructura lo que hace la aplicación, no que tenga controles de vista, vistas y modelos. Tengo 3 carpetas principales: Aplicación (donde está la funcionalidad de la aplicación, generalmente debería funcionar sin una interfaz de usuario). Entrega (sus controladores de vista y demás, en mi caso puedo entregar esta aplicación a 4 objetivos y todos usan el mismo código de la aplicación). Externo (su administrador de datos, debe poder intercambiar estos almacenes de datos sin romper la aplicación)

    Mi proyecto es de código abierto en caso de que quiera consultar más: ralcr / Jirassic

    No puedo agregar mucho a esto, pero creo que lo más importante es que depende de lo que necesite para mantener su código organizado.

    Si está utilizando MVC, tiene sentido mantener separados sus Modelos, sus Vistas y sus ViewControllers. Hago esto y mantengo mi contenido en una carpeta separada llamada “activos” y mantengo mis cosas “orientadas al sistema” (appDelegate, Storyboard, xcdatamodelId, plists, etc.) en la parte superior.

    Pero lo que me gusta hacer es explorar muchos tutoriales y tener una idea de cómo los profesionales organizan sus proyectos. Incluso si no uso la misma metodología, generalmente puedo entender por qué lo están usando y tal vez sea más relevante en el futuro.

    Solo sé que una talla no sirve para todos. Aunque los patrones arquitectónicos generalmente se usan como una opción personal, en su mayoría le resultará irrazonable usarlo incluso en aplicaciones a gran escala. Si te encuentras escribiendo código limpio, entonces realmente no tienes que preocuparte mucho sobre qué patrón te gustaría usar.

    Casi siempre su elección debe ser usar Composición contra herencia. Por qué ? Puede escalar su aplicación realmente bien sin ningún problema. En cualquier momento, eliminar y agregar código al código ya existente no debería romper nada o debería estar en un estado tal que probablemente tenga que hacer cambios mínimos. Si comprende bien los principios de SOLID, definitivamente tendrá una estructura de código limpia. Aquí hay algunas cosas en las que debe trabajar en la aplicación de iOS para obtener la arquitectura correcta, inyectar dependencias, definitivamente probar su aplicación de forma unitaria.

    Digamos que el nombre de su aplicación es Calculadora. Esta sería la estructura de carpetas que elegiría.
    Calculadora
    Recursos de calculadora
    Pruebas de calculadora
    Marcos

    La carpeta de la calculadora tendría estas subcarpetas

    • Servicio
    • UI (Todos los controles y vistas de la vista de la interfaz de usuario de la aplicación)
    • Modelos

    La carpeta CalculatorResources podría tener

    • Imágenes (Aquí entran todas las imágenes relevantes)
    • Videos (si su aplicación tiene algún video)
    • Todos mis Xib y Storyboards van aquí (podría tener subcarpetas basadas en sus diferentes secciones en la Aplicación
    • Audios (si los hay)

    CalculatorTests Folder debería replicar una estructura de carpetas similar a mi Calculator Folder. Debe tener todos los archivos de prueba para los archivos en la Carpeta de la Calculadora. (Si elige no las pruebas de unidad de escritura para su aplicación, puede ignorar esto).

    La carpeta de marcos debe agrupar todos los marcos que usa la aplicación. (ejemplo. CoreMedia.framework CoreData.framework, etc.)

    Un poco tarde para la fiesta, pero heres lo que hago. Cada parte de la aplicación se divide en diferentes escenas. Por ejemplo, la autenticación de usuario tendrá su propia escena y su propio guión gráfico también. Cada escena tendrá sus propias vistas y controladores de vista.

    Tiempo de imagen:

    Eche un vistazo a algunos tutoriales populares y los archivos de ejemplo que siguen. Nosotros en TECSOL: desarrollo de aplicaciones móviles, el desarrollo web casi siempre mantiene el archivo Xproj fuera, mientras que todo lo demás está en carpetas que se clasifican según sea necesario. Ejemplo tenemos fuentes, imágenes, controladores, íconos, etc.

    Dependemos en gran medida de GIT y esto hace que sea muy importante organizarse. Si no, simplemente rechazamos una rama en un desarrollador que no puede seguir el sistema.

    La mejor manera de obtener su propia aplicación móvil iOS es buscar un creador de aplicaciones móviles confiable, que tenga un equipo de desarrolladores de aplicaciones profesionales con años de experiencia en el campo. OnGoBuyo es el desarrollador de aplicaciones más confiable, confiable e innovador, la creación de soluciones de aplicaciones móviles es lo suficientemente robusta como para resistir casi cualquier tipo de situación y viene con excelentes características para atraer a más compradores a su tienda.

    More Interesting

    ¿Cuándo la API de iOS de Pubnub admitirá ARC?

    ¿Es cierto que los usuarios de iOS pueden estar seguros de que todas las versiones anteriores de iOS son compatibles con la versión actual de su dispositivo iOS?

    ¿Existe una API para Objective-C y JavaScript que pueda autocompletar direcciones en una aplicación (recogida y entrega) y luego conectarse con un CMS que filtre a las empresas que no prestan servicios en esas áreas?

    ¿Es realista iniciar mi aplicación iOS en Parse y luego, una vez que esté disponible para los usuarios, empiezo a desarrollar un back-end si es necesario si hay crecimiento?

    ¿Cuál fue su experiencia al integrar Swift en un proyecto Objective-C?

    ¿Cuáles son las mejores herramientas de creación para crear experiencias similares a revistas en el iPad?

    ¿IBeacon revolucionará la participación del cliente en el comercio minorista?

    ¿El nuevo MacBook Air de 13 pulgadas es lo suficientemente capaz para el desarrollo de iOS?

    ¿Cómo puedo hacer una aplicación para iPhone desde mi sitio web?

    Cómo comenzar el desarrollo de una 'aplicación de teclado' para dispositivos iOS

    ¿Hay alguna forma de descargar e instalar las versiones anteriores de aplicaciones de iOS en un iPad anterior que solo sea compatible con iOS 5.1.1? Alternativamente, ¿hay alguna manera de forzar la actualización de esta cosa a una versión más nueva de iOS?

    Necesito generar color a partir de un tono de audio en Objective-C para una aplicación. ¿Cómo lo hago?

    ¿Es iOS un buen comienzo para un principiante que no conoce ningún idioma?

    Cómo recuperar un SMS perdido después de la actualización de iOS 11

    Cómo obtener el iOS 11