Bibliotheken mit dem Swift Package Manager in iOS-Projekte einbinden
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.
-
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:
-
Öffne die Projektseite von Kingfisher und kopiere die Clone-URL des Projektes:
-
Wähle in Xcode File » Swift Packages » Add Package Dependency… um eine neue Abhängigkeit hinzuzufügen:
-
Gib die Clone-URL der Kingfisher-Bibliothek an:
-
Belasse die standardmäßigen Versionseinstellungen – die Bibliothek wird bis zum nächsten Major Release automatisch aktualisiert:
-
Füge nur das Kingfisher-Target zum Target der App hinzu:
-
-
Im Projekt unter Swift Packages kann die Versionsangabe nachträglich geändert werden:
-
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
-
Swift Package ManagerDokumentation zum Swift Package Manager von Apple.
-
Swift Package Manager: UsageDokumentation zur Verwendung des Swift Package Managers in dem zugehörigen GitHub-Projekt.
-
WWDC 2019: Adopting Swift Packages in XcodeVortrag von WWDC 2019 zum Swift Package Manager.
-
WWDC 2019: Creating Swift PackagesVortrag von der WWDC 2019 zur Erstellung von Swift Packages.
-
AsyncImageTipp: Ab iOS 15 gibt es in SwiftUI nativ mit AsyncImage die Möglichkeit, Bilder asynchron von einer URL zu Laden. Die Verwendung der Kingfisher-Bibliothek macht also nur Sinn in Projekten, die noch mit älteren iOS-Versionen kompatibel sein sollen.