Swift Academy · Lekcja

Package.swift: cele, produkty i zależności

Budowa manifestu Package.swift oraz definiowanie produktów bibliotecznych i wykonywalnych.

Lekcja 1 z 413 kroki

Package.swift: cele, produkty i zależności to bezpłatna lekcja Swift Academy na CoddyKit. To lekcja 1 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.

Omówienie Package.swift

Package.swift to manifest Swift Package Manager. Deklaruje nazwę pakietu, wersję Swift, targety, produkty i zależności.

import PackageDescription
let package = Package(
  name: "MyLibrary",
  platforms: [.iOS(.v16), .macOS(.v13)],
  products: [],
  dependencies: [],
  targets: []
)

Targety

Targety to podstawowe elementy budulcowe: .target (kod biblioteki lub wykonywalny) i .testTarget (kod testów).

.target(
  name: "MyFeature",
  dependencies: [],
  path: "Sources/MyFeature"
),
.testTarget(
  name: "MyFeatureTests",
  dependencies: ["MyFeature"],
  path: "Tests/MyFeatureTests"
)

Produkty

Produkty określają, co pakiet udostępnia odbiorcom: .library lub .executable.

.library(
  name: "MyFeature",
  targets: ["MyFeature"]
),
.executable(
  name: "MyTool",
  targets: ["MyTool"]
)

Biblioteki dynamiczne a statyczne

Należy określić linkowanie za pomocą .dynamic lub .static. Linkowanie statyczne jest domyślne i powoduje mniejszy narzut, a dynamiczne umożliwia współdzielenie między modułami.

.library(
  name: "MySDK",
  type: .dynamic,
  targets: ["MySDK"]
)

Zewnętrzne zależności

Zdalne zależności pakietu należy deklarować za pomocą adresu URL i wymagania dotyczącego wersji.

.package(url: "https://github.com/apple/swift-algorithms", from: "1.0.0"),
.package(url: "https://github.com/pointfreeco/swift-composable-architecture", exact: "1.0.0")

Używanie zewnętrznych zależności w targetach

Zewnętrzne produkty pakietów należy wskazywać w zależnościach targetu za pomocą .product(name:package:).

.target(
  name: "MyApp",
  dependencies: [
    .product(name: "Algorithms", package: "swift-algorithms"),
    .product(name: "ComposableArchitecture", package: "swift-composable-architecture")
  ]
)

Lokalne zależności pakietów

Należy wskazać katalog lokalnego pakietu w przypadku konfiguracji monorepo lub pracy nad własnym pakietem.

.package(path: "../MySharedLibrary"),

Wymagania dotyczące wersji Swift

Minimalną wersję narzędzi Swift należy ustawić na początku pliku Package.swift, a wymagania dotyczące platformy w inicjalizatorze pakietu.

// swift-tools-version: 5.9
import PackageDescription
let package = Package(
  name: "MyPackage",
  platforms: [.iOS(.v17)],
  // ...
)

Zasoby w targetach

Zasoby niezawierające kodu (obrazy, JSON, lokalizacja) należy dołączać za pomocą parametru resources:.

.target(
  name: "MyFeature",
  resources: [
    .process("Resources"),
    .copy("Fixtures/test_data.json")
  ]
)

Ustawienia kompilacji i targety C

Targety mogą konfigurować flagi C i ustawienia Swift, co jest przydatne podczas opakowywania bibliotek C lub kompilacji warunkowej.

.target(
  name: "CWrapper",
  cSettings: [.headerSearchPath("include")],
  swiftSettings: [.define("DEBUG", .when(configuration: .debug))]
)

Rozwiązywanie zależności pakietu

Należy uruchomić swift package resolve, aby pobrać zależności. Rozwiązane wersje są przechowywane w pliku Package.resolved.

// Commands:
// swift package resolve      – fetch dependencies
// swift package update       – update to latest compatible versions
// swift build                – build the package
// swift test                 – run tests

Szybkie sprawdzenie

Który element Package.swift określa, co pakiet udostępnia innym pakietom lub aplikacjom, które od niego zależą?

Podsumowanie lekcji

Package.swift: targets to jednostki kompilacji, products udostępniają je odbiorcom, a dependencies wskazują pakiety zdalne lub lokalne. Do łączenia zewnętrznych targetów należy używać .product(name:package:). W projektach zespołowych plik Package.resolved należy zatwierdzać w repozytorium, aby zablokować wersje.

Bezpłatny start

Ucz się Swift dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
122
Lekcje
409

Często zadawane pytania

Czy lekcja „Package.swift: cele, produkty i zależności” jest bezpłatna?

Tak — pełny tekst „Package.swift: cele, produkty i zależności” 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 „Package.swift: cele, produkty i zależności”?

Budowa manifestu Package.swift oraz definiowanie produktów bibliotecznych i wykonywalnych. Ć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 1 z 4.

Ile czasu zajmuje lekcja „Package.swift: cele, produkty i zależności”?

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