0Pricing
Swift Academy · Lektion

Versionierung, Konfliktauflösung und Swift-Plugins

Verwalten Sie Versionsbereiche, lösen Sie Abhängigkeitskonflikte und verwenden Sie Build-Tool-Plugins.

Versionierung, Konfliktauflösung und Swift-Plugins ist eine kostenlose Swift Academy-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Swift Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Swift Academy-Kurs umfasst insgesamt 4 Lektionen.

Semantische Versionierung in SPM

SPM verwendet SemVer: MAJOR.MINOR.PATCH. Deklarieren Sie Anforderungen mit from:, exact: oder .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 legt die exakten Versionen aller Abhängigkeiten fest. Committen Sie die Datei für Apps, lassen Sie sie bei Bibliotheken weg.

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

Versionskonflikte auflösen

Wenn zwei Pakete unterschiedliche Versionen derselben Abhängigkeit verlangen, versucht SPM, eine kompatible Version zu finden. Konflikte, die sich nicht auflösen lassen, führen zu einem Build-Fehler.

// 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

Eine Version erzwingen

Fügen Sie die in Konflikt stehende Abhängigkeit direkt zur Package.swift Ihrer App hinzu, um die Version zu überschreiben, die SPM sonst auswählen würde.

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

Build-Tool-Plug-ins

Build-Tool-Plug-ins werden während des Builds ausgeführt, um Quellcode zu generieren, Ressourcen zu verarbeiten oder automatisch Linter auszuführen.

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

Ein Build-Tool-Plug-in implementieren

Ein Build-Tool-Plug-in entspricht dem Protokoll BuildToolPlugin und gibt BuildCommands oder PrebuildCommands zurück.

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]
    )]
  }
}

Command-Plug-ins

Command-Plug-ins werden bei Bedarf aus Xcode oder über die CLI ausgeführt und eignen sich zum Formatieren, Linting oder Generieren von Dokumentation.

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

Ein Command-Plug-in ausführen

Führen Sie Command-Plug-ins über das Terminal oder das Kontextmenü von Xcode aus.

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

SwiftLint als Build-Plug-in verwenden

SwiftLint wird als SPM-Plug-in bereitgestellt und bei jedem Build automatisch ausgeführt.

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

Plug-in-Sandbox

Plug-ins werden aus Sicherheitsgründen in einer Sandbox mit eingeschränktem Dateisystemzugriff ausgeführt. Sie dürfen nur in ihr zugewiesenes Arbeitsverzeichnis schreiben.

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

Kurze Prüfung

Welchen Zweck erfüllt Package.resolved in einem Swift-Paket?

Zusammenfassung der Lektion

Verwenden Sie SemVer-Bereiche in Package.swift. Committen Sie Package.resolved bei Apps, um reproduzierbare Builds zu ermöglichen. Lösen Sie Versionskonflikte, indem Sie die Abhängigkeit direkt deklarieren. Build-Tool-Plug-ins werden während des Builds automatisch ausgeführt (Linter, Code-Generatoren). Command-Plug-ins werden bei Bedarf ausgeführt. Plug-ins sind aus Sicherheitsgründen in einer Sandbox eingeschränkt.

Häufig gestellte Fragen

Ist die Lektion „Versionierung, Konfliktauflösung und Swift-Plugins“ kostenlos?

Ja — der vollständige Text von „Versionierung, Konfliktauflösung und Swift-Plugins“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Swift Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Swift Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Versionierung, Konfliktauflösung und Swift-Plugins“?

Verwalten Sie Versionsbereiche, lösen Sie Abhängigkeitskonflikte und verwenden Sie Build-Tool-Plugins. Du übst Swift Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Swift Academy zu starten?

Keine Vorkenntnisse erforderlich. Swift Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.

Wie lange dauert die Lektion „Versionierung, Konfliktauflösung und Swift-Plugins“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Swift Academy-Lektion Code schreiben und ausführen?

Ja. Jede Swift Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Package.swift: Targets, Produkte und Abhängigkeiten
  2. Lokale Pakete und Feature-Module
  3. Binärziele und XCFrameworks
  4. Versionierung, Konfliktauflösung und Swift-Plugins
← Zurück zu Swift Academy