Arbeit mit S3 und Cloud-Speichern in Swift (iOS/macOS): Bibliothek AWSS3

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Arbeit mit S3 und Cloud-Speichern in Swift (iOS/macOS)

\n\n

In 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\n

In 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\n

Installation und Konfiguration von AWSS3

\n\n

Fü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
  1. Öffnen Sie Xcode, gehen Sie zu File → Add Packages...
  2. \n
  3. Geben Sie die Repository-URL ein: https://github.com/awslabs/aws-sdk-swift.git
  4. \n
  5. Wählen Sie das Paket AWSS3 und geben Sie die Version an (empfohlen wird die neueste stabile Version).
  6. \n
  7. Fügen Sie das Paket zum Ziel-Target hinzu.
  8. \n
\n\n

Nach der Installation importieren Sie das Modul in die Datei, in der die Arbeit mit dem Speicher stattfinden soll:

\n\n
import AWSS3\n
\n\n

Konfiguration des S3-Clients

\n\n

Fü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\n

Für AWS S3 ist die Konfiguration einfacher – es reicht, die Region anzugeben und die Anmeldedaten aus der IAM-Rolle oder Umgebungsvariablen zu beziehen:

\n\n
let configuration = AWSS3Configuration(\n    region: .useast1,\n    credentialsProvider: .default\n)\nlet s3Client = try await AWSS3Client(configuration: configuration)\n
\n\n

Grundlegende Operationen mit S3-Objekten

\n\n

1. Datei hochladen (Upload)

\n\n

Zum Hochladen von Daten in einen Bucket verwenden Sie die Methode putObject. Die Daten können Data, String oder ein Stream sein.

\n\n
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\n

2. Datei herunterladen (Download)

\n\n

Zum Abrufen eines Objekts verwenden Sie getObject:

\n\n
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\n

3. Liste der Objekte in einem Bucket abrufen

\n\n

Die Methode listObjectsV2 gibt eine Liste der Schlüssel (Dateinamen) im Bucket zurück:

\n\n

                
    
    

Empfehlungen