Paquetes locales y módulos de funcionalidades
Extraiga funcionalidades en paquetes locales de Swift para acelerar las compilaciones y aislarlas.
Paquetes locales y módulos de funcionalidades es una lección gratuita de Swift Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Swift Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Swift Academy incluye 4 lecciones en total.
¿Por qué usar módulos de funcionalidades?
Dividir una aplicación en paquetes locales impone la encapsulación, acelera las compilaciones incrementales y permite que los equipos trabajen en paralelo.
// Without modules: one giant target recompiles everything
// With modules: changes to FeatureA only recompile FeatureACreación de un paquete local
Cree un directorio junto al proyecto de Xcode y ejecute swift package init dentro de él.
mkdir Features/UserProfile
cd Features/UserProfile
swift package init --name UserProfile --type libraryAdición al proyecto de Xcode
Arrastre el directorio del paquete local al navegador de proyectos de Xcode. Xcode lo detecta automáticamente como un paquete de SPM.
// In Xcode:
// File → Add Package Dependencies → Add Local...
// Select the package directoryReferencia a un paquete local
En el Package.swift de la aplicación (o mediante Xcode), haga referencia a los paquetes locales con .package(path:).
.package(path: "../Features/UserProfile"),
// In the target:
.product(name: "UserProfile", package: "UserProfile")Superficie de la API pública
Solo las declaraciones public y open del paquete local son accesibles desde la aplicación. Use el control de acceso para definir el límite del módulo.
// UserProfile/Sources/UserProfile/ProfileView.swift
public struct ProfileView: View {
public init() {}
public var body: some View { Text("Profile") }
}Implementación interna
Todos los tipos internal son invisibles fuera del módulo, lo que impone la encapsulación automáticamente.
// Only visible within UserProfile module:
final class ProfileCache { ... }
struct ProfileMapper { ... }Estructura de un módulo de funcionalidades
Cada módulo de funcionalidades contiene internamente sus propias capas de Dominio, Datos y Presentación.
// UserProfile/
// ├── Sources/UserProfile/
// │ ├── Domain/ (entities, use cases, protocols)
// │ ├── Data/ (repositories)
// │ └── Presentation/ (views, view models)
// └── Tests/UserProfileTests/Módulo Core compartido
Extraiga las preocupaciones transversales (redes, analítica y sistema de diseño) a un módulo compartido que importen los módulos de funcionalidades.
// CoreNetwork package
// CoreDesign package
// Both imported by FeatureA and FeatureBGrafo de dependencias
Los módulos de funcionalidades no deben depender directamente unos de otros. Las dependencias compartidas deben pasar por un módulo Core para evitar el acoplamiento.
// GOOD:
// FeatureA → CoreNetwork
// FeatureB → CoreNetwork
// BAD:
// FeatureA → FeatureB (tight coupling)Ventajas en el tiempo de compilación
Con límites de módulo bien definidos, Xcode solo vuelve a compilar los módulos afectados cuando cambian los archivos de código fuente.
// Change in UserProfile → only UserProfile recompiles
// App target links the new binary → fast incremental buildPruebas de los módulos de funcionalidades
Cada módulo de funcionalidades tiene su propio destino de pruebas, lo que permite ejecutar pruebas en paralelo y acelerar la CI.
// Run all tests:
swift test --package-path Features/UserProfile
// Or let Xcode run them as part of the main test planComprobación rápida
¿Qué nivel de acceso se necesita para que las declaraciones de un paquete local de Swift puedan utilizarse desde el destino de la aplicación?
Resumen de la lección
Cree paquetes locales de funcionalidades con swift package init, haga referencia a ellos mediante .package(path:) y exponga únicamente tipos public. Extraiga las utilidades compartidas a un módulo Core. Los módulos de funcionalidades no deben depender unos de otros. Unos límites de módulo bien definidos reducen considerablemente los tiempos de compilación incremental.
Preguntas frecuentes
¿La lección «Paquetes locales y módulos de funcionalidades» es gratis?
Sí — el texto completo de «Paquetes locales y módulos de funcionalidades» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Swift Academy, actualiza a CoddyKit PRO. El curso de Swift Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Paquetes locales y módulos de funcionalidades»?
Extraiga funcionalidades en paquetes locales de Swift para acelerar las compilaciones y aislarlas. Practicas Swift Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Swift Academy?
No se requiere experiencia previa. Swift Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.
¿Cuánto tiempo toma la lección «Paquetes locales y módulos de funcionalidades»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Swift Academy?
Sí. Cada lección de Swift Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Package.swift: targets, productos y dependencias
- Paquetes locales y módulos de funcionalidades
- Targets binarios y XCFrameworks
- Versionado, resolución de conflictos y plugins de Swift