Arbeit mit S3 und Cloud-Speichern in Swift (iOS/macOS)
\n\nIn der modernen Entwicklung für iOS und macOS besteht häufig die Notwendigkeit, Cloud-Speicher zu integrieren, die mit dem Amazon S3-Protokoll (Simple Storage Service) kompatibel sind. Dies kann sowohl der offizielle AWS S3 als auch eine selbst gehostete Lösung wie MinIO oder DigitalOcean Spaces sein. Für Swift gibt es ein leistungsstarkes Werkzeug – die Bibliothek AWSS3 aus dem AWS SDK for Swift, die eine einfache Verwaltung von Objekten in Buckets ermöglicht: Hochladen, Herunterladen, Löschen und Abrufen von Metadaten.
\n\nIn diesem Artikel werden wir besprechen, wie man AWSS3 in einem Projekt einrichtet, grundlegende Dateioperationen durchführt und mögliche Fehler behandelt. Das Material eignet sich für iOS- und macOS-Anwendungen, die in Swift 5.7+ geschrieben sind.
\n\nInstallation und Konfiguration von AWSS3
\n\nFür die Arbeit mit AWSS3 muss die Abhängigkeit über den Swift Package Manager (SPM) oder CocoaPods hinzugefügt werden. Betrachten wir SPM – die modernste Methode.
\n\n- \n
- Öffnen Sie Xcode, gehen Sie zu
File → Add Packages...\n - Geben Sie die Repository-URL ein:
https://github.com/awslabs/aws-sdk-swift.git\n - Wählen Sie das Paket
AWSS3und geben Sie die Version an (empfohlen wird die neueste stabile Version). \n - Fügen Sie das Paket zum Ziel-Target hinzu. \n
Nach der Installation importieren Sie das Modul in die Datei, in der die Arbeit mit dem Speicher stattfinden soll:
\n\nimport AWSS3\n\n\nKonfiguration des S3-Clients
\n\nFür die Verbindung zu einem S3-kompatiblen Speicher muss eine Konfiguration mit Anmeldedaten (Access Key, Secret Key) und einem Endpunkt erstellt werden. Für AWS S3 kann der Endpunkt weggelassen werden – das SDK ermittelt die Region automatisch. Für MinIO oder andere Dienste ist der Endpunkt erforderlich.
\n\n// Beispielkonfiguration für MinIO (lokaler Server)\nlet endpoint = "http://localhost:9000"\nlet accessKey = "YOUR_ACCESS_KEY"\nlet secretKey = "YOUR_SECRET_KEY"\n\nlet credentials = AWSCredentials(accessKey: accessKey, secretAccessKey: secretKey)\nlet region = AWSRegion.useast1 // oder eine andere Region\n\nlet configuration = AWSS3Configuration(\n region: region,\n endpoint: endpoint,\n credentialsProvider: .static(credentials),\n useFIPS: false,\n useDualStack: false\n)\n\nlet s3Client = try await AWSS3Client(configuration: configuration)\n\n\nFür AWS S3 ist die Konfiguration einfacher – es reicht, die Region anzugeben und die Anmeldedaten aus der IAM-Rolle oder Umgebungsvariablen zu beziehen:
\n\nlet configuration = AWSS3Configuration(\n region: .useast1,\n credentialsProvider: .default\n)\nlet s3Client = try await AWSS3Client(configuration: configuration)\n\n\nGrundlegende Operationen mit S3-Objekten
\n\n1. Datei hochladen (Upload)
\n\nZum Hochladen von Daten in einen Bucket verwenden Sie die Methode putObject. Die Daten können Data, String oder ein Stream sein.
func uploadFile(bucket: String, key: String, data: Data) async throws {\n let putObjectInput = PutObjectInput(\n body: .data(data),\n bucket: bucket,\n key: key\n )\n let response = try await s3Client.putObject(input: putObjectInput)\n print("Datei hochgeladen. ETag: \\(response.eTag ?? "unbekannt")")\n}\n\n\n2. Datei herunterladen (Download)
\n\nZum Abrufen eines Objekts verwenden Sie getObject:
func downloadFile(bucket: String, key: String) async throws -> Data {\n let getObjectInput = GetObjectInput(\n bucket: bucket,\n key: key\n )\n let response = try await s3Client.getObject(input: getObjectInput)\n guard let body = response.body else {\n throw NSError(domain: "S3Error", code: -1, userInfo: [NSLocalizedDescriptionKey: "Leerer Antworttext"])\n }\n let data = try await body.readData()\n return data\n}\n\n\n3. Liste der Objekte in einem Bucket abrufen
\n\nDie Methode listObjectsV2 gibt eine Liste der Schlüssel (Dateinamen) im Bucket zurück:
Auch in der Bibliothek
Arbeiten mit Markdown in Go (Golang): Bibliotheken, Parsing und Konvertierung
Elasticsearch C++-Client: Vollständiger Leitfaden für die Arbeit mit der Suchmaschine
Konfiguration von Rust-Anwendungen: Bibliotheken config und dotenv
HTTP-Client für JavaScript (Node.js): Top-Bibliotheken
Passlib: Passwort-Hashing in Python
Empfehlungen