Monorepositorio con Swift: organización de código para principiantes

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Monorepositorio con Swift: organización de código para principiantes



Cuando comienzas a desarrollar aplicaciones en Swift para iOS o macOS, tarde o temprano te enfrentas a la pregunta: ¿cómo organizar el código para que no se convierta en un caos? Especialmente si tienes varios proyectos (por ejemplo, una aplicación iOS, una extensión watchOS y una parte de servidor con Vapor). Uno de los enfoques modernos es el monorepositorio (monorepo). En este artículo, analizaremos qué es un monorepositorio, por qué es necesario en el desarrollo con Swift y cómo organizarlo en la práctica.



¿Qué es un monorepositorio y por qué es necesario?



Un monorepositorio (monorepo) es un enfoque para la gestión de código en el que todos los proyectos, bibliotecas y módulos se almacenan en un solo repositorio (por ejemplo, en Git). A diferencia de los multirepositorios, donde cada proyecto vive en su propio almacenamiento separado, un monorepositorio lo unifica todo en un solo lugar.



Para los desarrolladores de Swift, esto ofrece varias ventajas:



  • Versión única de dependencias — sabes exactamente qué versión de una biblioteca se utiliza en todos los proyectos.
  • Refactorización simplificada — un cambio de API en una biblioteca se ve inmediatamente en todos los proyectos dependientes.
  • Configuraciones compartidas — un solo SwiftLint, una sola configuración de CI/CD, unas mismas reglas de formato.
  • Búsqueda fácil — todo en un solo lugar, sin necesidad de cambiar entre repositorios.


Sin embargo, también hay matices: un monorepositorio requiere disciplina y una estructura adecuada, de lo contrario se convierte en un «vertedero». Pero para los principiantes, es una excelente manera de aprender a organizar el código.



Estructura de un monorepositorio para proyectos Swift



Supongamos que estás creando una aplicación para iOS con módulos compartidos. Una estructura típica de un monorepositorio en Swift podría verse así:



MyMonorepo/├── Apps/│   ├── iOSApp/          # Aplicación iOS principal│   │   ├── Sources/│   │   ├── Resources/│   │   └── Package.swift│   └── macOSApp/        # Versión para macOS│       ├── Sources/│       └── Package.swift├── Packages/│   ├── Core/            # Utilidades comunes (redes, registro)│   │   ├── Sources/│   │   └── Package.swift│   ├── UIComponents/    # Componentes de UI reutilizables│   │   ├── Sources/│   │   └── Package.swift│   └── Analytics/       # Módulo de analítica│       ├── Sources/│       └── Package.swift├── Scripts/             # Scripts auxiliares├── .swiftlint.yml       # Configuración única del linter├── Package.swift        # Manifiesto raíz (opcional)└── README.md


Observa que aquí se utiliza Swift Package Manager (SPM) — la herramienta estándar para gestionar dependencias en Swift. Cada módulo es un Swift Package independiente que se puede conectar a las aplicaciones.



Cómo crear un monorepositorio en Swift: guía paso a paso



Vamos a crear un monorepositorio simple con dos módulos y una aplicación. Sigue estos pasos en la terminal:



Paso 1: Crea el directorio raíz e inicializa Git



mkdir MyMonorepocd MyMonorepogit init


Paso 2: Crea la estructura de carpetas



mkdir -p Apps/iOSApp/Sourcesmkdir -p Packages/Core/Sourcesmkdir -p Packages/UIComponents/Sources


Paso 3: Crea el Package.swift para el módulo Core



Crea el archivo Packages/Core/Package.swift:



// swift-tools-version:5.9import PackageDescription

let package = Package( name: "Core", platforms: [ .iOS(.v16), .macOS(.v13) ], products: [ .library( name: "Core", targets: ["Core"]) ], targets: [ .target( name: "Core", path: "Sources") ])


Paso 4: Escribe código simple en el módulo Core



Crea Packages/Core/Source

Blogs

Book Recommendations