Bibliotheken mit dem Swift Package Manager in iOS-Projekte einbinden

von @ralfebert · aktualisiert am 3. November 2021
Xcode 13 & iOS 15
Entwickler*innen ohne iOS-Vorkenntnisse
Deutsch

Mit dem Swift Package Manager können externe Bibliotheken in Xcode-Projekte eingebunden werden. Damit ist das Tool eine Alternative zu Cocoapods und Carthage für das Verwalten der Abhängigkeiten eines iOS-Projektes.

Das folgende Tutorial zeigt die Verwendung des Swift Package Managers anhand der Einbindung der 3rd-Party-Bibliothek Kingfisher zum asynchronen Laden von Bildern. Diese Bibliothek stellt die für den Swift Package Manager benötigten Metadaten bereit, erkennbar an der Datei Package.swift im Hauptverzeichnis des Projektes.

  1. Lade den Start-Stand für das Beispielprojekt Countries. Dieses enthält den Grundaufbau für eine App, die Bilder per SwiftUI in einem List-View anzeigt:

  2. Öffne die Projektseite von Kingfisher und kopiere die Clone-URL des Projektes:

    Clone-URL von Kingfisher kopieren
  3. Wähle in Xcode File » Swift Packages » Add Package Dependency… um eine neue Abhängigkeit hinzuzufügen:

    Xcode: Add Package Dependency
  4. Gib die Clone-URL der Kingfisher-Bibliothek an:

    File » Swift Packages » Add Package Dependency…
  5. Belasse die standardmäßigen Versionseinstellungen – die Bibliothek wird bis zum nächsten Major Release automatisch aktualisiert:

    Xcode Package Options
  6. Füge nur das Kingfisher-Target zum Target der App hinzu:

    Xcode Add Package
  7. Die Bibliothek wird nun im Projekt eingerichtet und im Projekt Navigator angezeigt:

    Xcode Swift Package Dependencies
  8. Im Projekt unter Swift Packages kann die Versionsangabe nachträglich geändert werden:

    Swift Packages im Xcode-Projekt
  9. Verwende die Bibliothek in CountryRowView: Importiere dort das Modul Kingfisher und verwende die Klasse KFImage, um die Bilder von der im Datenmodell enthaltenen URL herunterzuladen:

    import SwiftUI
    import Kingfisher
    
    struct CountryRowView: View {
        let country: Country
    
        var body: some View {
            HStack {
                KFImage(country.landmark.imageUrl)
                    .resizable()
                    .scaledToFit()
                    .frame(width: 50)
    
                Text(self.country.name)
                Spacer()
            }
        }
    }
    

Fragen & Antworten

Wo wird das ausgecheckte Modul abgelegt?

Im Derived Data Ordner von Xcode:

Was passiert, wenn das Projekt geöffnet wird, ohne das die Bibliothek bereits heruntergeladen wurde?

Die Bibliothek wird von Xcode automatisch heruntergeladen:

Was passiert, wenn eine neue Version der Bibliothek erscheint?

Der verwendete Commit-Hash der Bibliothek wird im Xcode-Projekt unter project.xcworkspace/xcshareddata/swiftpm/Package.resolved abgelegt. Diese Angabe wird verwendet, um die Bibliothek herunterzuladen. Es erfolgt kein automatisches Update, sondern die Version der Bibliothek ist auf diesen Stand festgelegt.

Die Abhängigkeit kann mit File » Swift Packages » Update to Latest Package Versions aktualisiert werden.

Weitere Informationen