0Pricing
Swift Academy · Lección

Versionado, resolución de conflictos y plugins de Swift

Gestione rangos de versiones, resuelva conflictos de dependencias y utilice plugins de herramientas de compilación.

Versionado, resolución de conflictos y plugins de Swift es una lección gratuita de Swift Academy en CoddyKit. Esta es la lección 4 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.

Versionado semántico en SPM

SPM utiliza semver: MAJOR.MINOR.PATCH. Declare los requisitos con from:, exact: o .upToNextMajor.

.package(url: "https://github.com/apple/swift-log", from: "1.5.0"),
.package(url: "https://github.com/vapor/vapor", exact: "4.83.0"),
.package(url: "https://github.com/pointfreeco/swift-composable-architecture",
  .upToNextMajor(from: "1.0.0"))

Package.resolved

Package.resolved fija las versiones exactas de todas las dependencias. Confírmelo en el repositorio para las apps; omítalo en las bibliotecas.

// Package.resolved (auto-generated):
// Pins exact commit hash and version for every dependency
// Run "swift package update" to update pinned versions

Resolver conflictos de versiones

Cuando dos paquetes requieren versiones diferentes de la misma dependencia, SPM intenta encontrar una versión compatible. Los conflictos que no se pueden resolver provocan un error de compilación.

// PackageA requires Logging 1.4.0
// PackageB requires Logging 1.5.0
// SPM resolves to 1.5.0 (satisfies both >= 1.x)
// Conflict: PackageA requires Logging 1.x, PackageB requires 2.x

Forzar una versión

Añada directamente la dependencia en conflicto al Package.swift de su app para reemplazar la versión que SPM elegiría de otro modo.

// Force Logging 1.5.0 by declaring it directly:
.package(url: "https://github.com/apple/swift-log", exact: "1.5.0")

Complementos de herramientas de compilación

Los complementos de herramientas de compilación se ejecutan durante la compilación para generar código fuente, procesar recursos o ejecutar linters automáticamente.

// In Package.swift:
.plugin(
  name: "SourceGenerator",
  capability: .buildTool()
)

Implementar un complemento de herramientas de compilación

Un complemento de herramientas de compilación se ajusta a BuildToolPlugin y devuelve objetos BuildCommand o PrebuildCommand.

import PackagePlugin

@main
struct SourceGenerator: BuildToolPlugin {
  func createBuildCommands(context: PluginContext, target: Target) async throws -> [Command] {
    let output = context.pluginWorkDirectory.appending("Generated.swift")
    return [.buildCommand(
      displayName: "Generating sources",
      executable: try context.tool(named: "gen-tool").path,
      arguments: ["--output", output],
      outputFiles: [output]
    )]
  }
}

Complementos de comandos

Los complementos de comandos se ejecutan bajo demanda desde Xcode o la CLI, y son útiles para dar formato, ejecutar linters o generar documentación.

// In Package.swift:
.plugin(
  name: "FormatPlugin",
  capability: .command(intent: .sourceCodeFormatting())
)

Ejecutar un complemento de comandos

Ejecute los complementos de comandos desde el terminal o desde el menú contextual de Xcode.

// CLI:
swift package plugin format-source-code
// Xcode: right-click target → "Format Source Code"

Usar SwiftLint como complemento de compilación

SwiftLint se distribuye como un complemento de SPM que se ejecuta automáticamente en cada compilación.

.package(url: "https://github.com/realm/SwiftLint", from: "0.54.0"),
// In target:
.plugin(name: "SwiftLintBuildToolPlugin", package: "SwiftLint")

Entorno aislado de los complementos

Los complementos se ejecutan en un entorno aislado con acceso limitado al sistema de archivos por motivos de seguridad. Solo pueden escribir en su directorio de trabajo asignado.

// Accessible from plugins:
// context.pluginWorkDirectory — writable work dir
// context.package.directory — read-only source
// target.sourceFiles — source file list

Comprobación rápida

¿Cuál es la finalidad de Package.resolved en un paquete de Swift?

Resumen de la lección

Use rangos de semver en Package.swift. Confirme Package.resolved en el repositorio de las apps para obtener compilaciones reproducibles. Resuelva los conflictos de versiones declarando directamente la dependencia. Los complementos de herramientas de compilación se ejecutan automáticamente durante la compilación (linters y generadores de código). Los complementos de comandos se ejecutan bajo demanda. Los complementos se ejecutan en un entorno aislado por motivos de seguridad.

Preguntas frecuentes

¿La lección «Versionado, resolución de conflictos y plugins de Swift» es gratis?

Sí — el texto completo de «Versionado, resolución de conflictos y plugins de Swift» 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 «Versionado, resolución de conflictos y plugins de Swift»?

Gestione rangos de versiones, resuelva conflictos de dependencias y utilice plugins de herramientas de compilación. 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 4 de 4.

¿Cuánto tiempo toma la lección «Versionado, resolución de conflictos y plugins de Swift»?

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