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 versionsVersionskonflikte 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.xEine 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 listKurze 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
- Package.swift: Targets, Produkte und Abhängigkeiten
- Lokale Pakete und Feature-Module
- Binärziele und XCFrameworks
- Versionierung, Konfliktauflösung und Swift-Plugins