0Pricing
Swift Academy · Lección

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 FeatureA

Creació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 library

Adició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 directory

Referencia 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 FeatureB

Grafo 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 build

Pruebas 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 plan

Comprobació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

  1. Package.swift: targets, productos y dependencias
  2. Paquetes locales y módulos de funcionalidades
  3. Targets binarios y XCFrameworks
  4. Versionado, resolución de conflictos y plugins de Swift
← Volver a Swift Academy