Travailler avec S3 et les stockages cloud en Swift (iOS/macOS)
\n\nDans le développement moderne pour iOS et macOS, il est souvent nécessaire d'intégrer des stockages cloud compatibles avec le protocole Amazon S3 (Simple Storage Service). Cela peut être aussi bien l'AWS S3 officiel que des solutions auto-hébergées comme MinIO ou DigitalOcean Spaces. Pour Swift, il existe un outil puissant — la bibliothèque AWSS3 du AWS SDK for Swift, qui permet de gérer facilement les objets dans les buckets : uploader, télécharger, supprimer et obtenir des métadonnées.
\n\nDans cet article, nous allons voir comment configurer AWSS3 dans un projet, effectuer les opérations de base avec les fichiers et gérer les erreurs possibles. Ce contenu convient aux applications iOS et macOS écrites en Swift 5.7+.
\n\nInstallation et configuration d'AWSS3
\n\nPour travailler avec AWSS3, il est nécessaire d'ajouter la dépendance via Swift Package Manager (SPM) ou CocoaPods. Examinons SPM, la méthode la plus moderne.
\n\n- \n
- Ouvrez Xcode, allez dans
File → Add Packages...\n - Entrez l'URL du dépôt :
https://github.com/awslabs/aws-sdk-swift.git\n - Sélectionnez le paquet
AWSS3et spécifiez la version (la dernière version stable est recommandée). \n - Ajoutez le paquet à la cible souhaitée. \n
Après l'installation, importez le module dans le fichier où vous travaillerez avec le stockage :
\n\nimport AWSS3\n\n\nConfiguration du client S3
\n\nPour se connecter à un stockage compatible S3, il est nécessaire de créer une configuration avec les identifiants (Access Key, Secret Key) et un endpoint. Pour AWS S3, l'endpoint peut être omis — le SDK déterminera automatiquement la région. Pour MinIO ou d'autres services, l'endpoint est obligatoire.
\n\n// Exemple de configuration pour MinIO (serveur local)\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 // ou une autre région\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\nPour AWS S3, la configuration est plus simple — il suffit de spécifier la région et d'obtenir les credentials depuis un rôle IAM ou des variables d'environnement :
\n\nlet configuration = AWSS3Configuration(\n region: .useast1,\n credentialsProvider: .default\n)\nlet s3Client = try await AWSS3Client(configuration: configuration)\n\n\nOpérations de base avec les objets S3
\n\n1. Upload de fichier
\n\nPour uploader des données dans un bucket, utilisez la méthode putObject. Les données peuvent être de type Data, String ou un flux.
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("Fichier uploadé. ETag : \\(response.eTag ?? "inconnu")")\n}\n\n\n2. Téléchargement de fichier
\n\nPour obtenir un objet, utilisez 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: "Corps de réponse vide"])\n }\n let data = try await body.readData()\n return data\n}\n\n\n3. Obtention de la liste des objets dans un bucket
\n\nLa méthode listObjectsV2 retourne une liste de clés (noms de fichiers) dans le bucket :
Aussi dans la bibliothèque
asyncpg – client PostgreSQL asynchrone
Génération de rapports PDF en TypeScript : la bibliothèque pdf-lib
Géolocalisation et cartes en C++ : aperçu des bibliothèques et outils
Envoi de SMS en Go (Golang) : API de la bibliothèque golang-sms
Travailler avec les archives ZIP en C# (.NET) : guide complet
Recommendations