Swift Academy · Lektion

Lokale packages og feature-moduler

Udtræk features til lokale Swift-packages for hurtigere builds og bedre isolation.

Lektion 2 af 413 trin

Lokale packages og feature-moduler er en gratis Swift Academy-lektion på CoddyKit. Dette er lektion 2 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Swift Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Swift Academy-kurset indeholder 4 lektioner i alt.

Hvorfor funktionsmoduler?

Opdeling af en app i lokale pakker håndhæver indkapsling, gør trinvise bygninger hurtigere og muliggør parallel udvikling i teamet.

// Without modules: one giant target recompiles everything
// With modules: changes to FeatureA only recompile FeatureA

Oprettelse af en lokal pakke

Opret en mappe ved siden af dit Xcode-projekt, og kør swift package init i den.

mkdir Features/UserProfile
cd Features/UserProfile
swift package init --name UserProfile --type library

Tilføjelse til Xcode-projektet

Træk den lokale pakkemappe ind i Xcodes projektnavigator. Xcode registrerer den automatisk som en SPM-pakke.

// In Xcode:
// File → Add Package Dependencies → Add Local...
// Select the package directory

Reference til en lokal pakke

Referér til lokale pakker med .package(path:) i din apps Package.swift eller via Xcode.

.package(path: "../Features/UserProfile"),
// In the target:
.product(name: "UserProfile", package: "UserProfile")

Den offentlige API-overflade

Kun public- og open-erklæringer i den lokale pakke er tilgængelige fra appen. Brug adgangskontrol til at definere modulgrænsen.

// UserProfile/Sources/UserProfile/ProfileView.swift
public struct ProfileView: View {
  public init() {}
  public var body: some View { Text("Profile") }
}

Intern implementering

Alle internal-typer er usynlige uden for modulet, hvilket automatisk håndhæver indkapsling.

// Only visible within UserProfile module:
final class ProfileCache { ... }
struct ProfileMapper { ... }

Struktur for funktionsmoduler

Hvert funktionsmodul ejer sine egne domæne-, data- og præsentationslag internt.

// UserProfile/
// ├── Sources/UserProfile/
// │   ├── Domain/         (entities, use cases, protocols)
// │   ├── Data/           (repositories)
// │   └── Presentation/   (views, view models)
// └── Tests/UserProfileTests/

Delt Core-modul

Udtræk tværgående hensyn (netværk, analyse, designsystem) til et delt modul, som importeres af funktionsmodulerne.

// CoreNetwork package
// CoreDesign package
// Both imported by FeatureA and FeatureB

Afhængighedsgraf

Funktionsmoduler bør ikke afhænge direkte af hinanden. Delte afhængigheder bør gå gennem et Core-modul for at undgå kobling.

// GOOD:
// FeatureA → CoreNetwork
// FeatureB → CoreNetwork
// BAD:
// FeatureA → FeatureB  (tight coupling)

Fordele ved byggetid

Med tydelige modulgrænser genopbygger Xcode kun de berørte moduler, når kildefiler ændres.

// Change in UserProfile → only UserProfile recompiles
// App target links the new binary → fast incremental build

Testning af funktionsmoduler

Hvert funktionsmodul har sit eget testmål, hvilket muliggør parallel testkørsel og hurtigere CI.

// Run all tests:
swift test --package-path Features/UserProfile
// Or let Xcode run them as part of the main test plan

Hurtigt tjek

Hvilket adgangsniveau kræves for erklæringer i en lokal Swift-pakke, hvis de skal kunne bruges fra appens mål?

Opsummering af lektionen

Opret lokale funktionspakker med swift package init, referér til dem via .package(path:), og eksponér kun public-typer. Udtræk delte hjælpefunktioner til et Core-modul. Funktionsmoduler bør ikke afhænge af hinanden. Tydelige modulgrænser reducerer tiden for trinvise bygninger markant.

Gratis at komme i gang

Lær Swift med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
122
Lektioner
409

Ofte stillede spørgsmål

Er lektionen “Lokale packages og feature-moduler” gratis?

Ja — alle 3 lektioner i læringssporet Swift Academy, inklusive “Lokale packages og feature-moduler”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Swift Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Lokale packages og feature-moduler”?

Udtræk features til lokale Swift-packages for hurtigere builds og bedre isolation. Du øver dig i Swift Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Swift Academy?

Der kræves ingen tidligere erfaring. Swift Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 2 af 4.

Hvor lang tid tager lektionen “Lokale packages og feature-moduler”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Swift Academy-lektion?

Ja. Alle Swift Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Package.swift: targets, produkter og afhængigheder
  2. Lokale packages og feature-moduler
  3. Binære targets og XCFrameworks
  4. Versionsstyring, konfliktløsning og Swift-plugins
← Tilbage til Swift Academy