0Pricing
Swift Academy · Lekcja

Wersjonowanie, rozwiązywanie konfliktów i wtyczki Swift

Zarządzanie zakresami wersji, rozwiązywanie konfliktów zależności i używanie wtyczek narzędzi kompilacji.

Wersjonowanie, rozwiązywanie konfliktów i wtyczki Swift to bezpłatna lekcja Swift Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Swift Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Swift Academy zawiera 4 lekcji w sumie.

Wersjonowanie semantyczne w SPM

SPM używa semver: MAJOR.MINOR.PATCH. Wymagania należy deklarować za pomocą from:, exact: lub .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 przypina dokładne wersje wszystkich zależności. W przypadku aplikacji należy go zatwierdzić w systemie kontroli wersji, a w przypadku bibliotek pominąć.

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

Rozwiązywanie konfliktów wersji

Gdy dwa pakiety wymagają różnych wersji tej samej zależności, SPM próbuje znaleźć zgodną wersję. Konflikty, których nie można rozwiązać, powodują błąd kompilacji.

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

Wymuszanie wersji

Należy dodać konfliktową zależność bezpośrednio do pliku Package.swift aplikacji, aby zastąpić wersję, którą w przeciwnym razie wybrałby SPM.

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

Wtyczki narzędzi budowania

Wtyczki narzędzi budowania uruchamiają się podczas kompilacji, aby automatycznie generować kod źródłowy, przetwarzać zasoby lub uruchamiać lintery.

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

Implementowanie wtyczki narzędzia budowania

Wtyczka narzędzia budowania musi implementować protokół BuildToolPlugin i zwracać polecenia BuildCommand lub 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]
    )]
  }
}

Wtyczki poleceń

Wtyczki poleceń uruchamiają się na żądanie z Xcode lub interfejsu wiersza poleceń. Są przydatne do formatowania, lintowania lub generowania dokumentacji.

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

Uruchamianie wtyczki polecenia

Wtyczki poleceń można uruchamiać w terminalu lub z menu kontekstowego Xcode.

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

Używanie SwiftLint jako wtyczki narzędzia budowania

SwiftLint jest dostarczany jako wtyczka SPM, która uruchamia się automatycznie podczas każdej kompilacji.

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

Piaskownica wtyczki

Ze względów bezpieczeństwa wtyczki działają w piaskownicy z ograniczonym dostępem do systemu plików. Mogą zapisywać pliki wyłącznie w wyznaczonym katalogu roboczym.

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

Szybkie sprawdzenie

Jaki jest cel pliku Package.resolved w pakiecie Swift?

Podsumowanie lekcji

Należy używać zakresów semver w Package.swift. W przypadku aplikacji należy zatwierdzać plik Package.resolved, aby zapewnić powtarzalność kompilacji. Konflikty wersji można rozwiązywać, deklarując zależność bezpośrednio. Wtyczki narzędzi budowania uruchamiają się automatycznie podczas kompilacji (lintery, generatory kodu). Wtyczki poleceń uruchamiają się na żądanie. Ze względów bezpieczeństwa wtyczki działają w piaskownicy.

Często zadawane pytania

Czy lekcja „Wersjonowanie, rozwiązywanie konfliktów i wtyczki Swift” jest bezpłatna?

Tak — pełny tekst „Wersjonowanie, rozwiązywanie konfliktów i wtyczki Swift” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Swift Academy, przejdź na CoddyKit PRO. Kurs Swift Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Wersjonowanie, rozwiązywanie konfliktów i wtyczki Swift”?

Zarządzanie zakresami wersji, rozwiązywanie konfliktów zależności i używanie wtyczek narzędzi kompilacji. Ćwiczysz Swift Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Swift Academy?

Nie wymagamy żadnego doświadczenia. Swift Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.

Ile czasu zajmuje lekcja „Wersjonowanie, rozwiązywanie konfliktów i wtyczki Swift”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Swift Academy?

Tak. Każda lekcja Swift Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Package.swift: cele, produkty i zależności
  2. Pakiety lokalne i moduły funkcji
  3. Cele binarne i XCFrameworks
  4. Wersjonowanie, rozwiązywanie konfliktów i wtyczki Swift
← Powrót do Swift Academy