Travailler avec S3 et les stockages cloud en Swift (iOS/macOS)
Dans le développement moderne d'applications mobiles et de bureau en Swift, il est souvent nécessaire de stocker et de transférer de grands volumes de données : images, vidéos, documents utilisateurs. Amazon S3 (Simple Storage Service) est l'une des solutions cloud les plus populaires pour ces tâches. Dans cet article, nous allons voir comment intégrer S3 dans des applications Swift pour iOS et macOS en utilisant le SDK officiel d'Amazon — AWSS3, ainsi qu'une approche de plus haut niveau via le framework Amplify.
Pourquoi utiliser S3 dans les applications Swift ?
S3 fournit un stockage d'objets scalable, sécurisé et économique. L'utilisation de S3 en Swift permet de :
- Décharger la charge de stockage des fichiers de l'appareil vers le cloud.
- Assurer l'accès aux données depuis n'importe quel appareil de l'utilisateur.
- Utiliser des mécanismes intégrés de chiffrement et de contrôle d'accès.
- S'intégrer avec d'autres services AWS (Lambda, Cognito, CloudFront).
Configuration de l'environnement
Pour commencer, vous aurez besoin de :
- Un compte AWS et un bucket S3 créé.
- Xcode 14+ et un projet Swift (iOS 15+ / macOS 12+).
- L'installation des dépendances via Swift Package Manager (SPM).
Installation d'AWSS3 via SPM
Ajoutez le paquet dans Package.swift ou via l'interface Xcode :
// File → Add Packages → rechercher : https://github.com/aws-amplify/aws-sdk-ios-spm// Sélectionnez "AWSS3" dans la liste des produits.Dans le code, importez la bibliothèque :
import AWSS3Exemple de base : téléchargement d'un fichier vers S3
Considérons le scénario le plus simple — le téléchargement d'une image depuis la galerie de l'utilisateur. Pour l'authentification, on utilise Cognito Identity Pool, mais en mode test, on peut passer les clés directement (non recommandé pour la production).
Configuration du service
let credentialsProvider = AWSStaticCredentialsProvider( accessKey: "YOUR_ACCESS_KEY", secretKey: "YOUR_SECRET_KEY")let configuration = AWSServiceConfiguration( region: .USEast1, credentialsProvider: credentialsProvider)AWSServiceManager.default().defaultServiceConfiguration = configurationTéléchargement du fichier (upload)
func uploadImageToS3(imageData: Data, bucketName: String, key: String) { let request = AWSS3TransferManagerUploadRequest()! request.bucket = bucketName request.key = key request.body = imageData request.contentLength = Int64(imageData.count)
let transferManager = AWSS3TransferManager.default() transferManager?.upload(request).continueWith { task -> Any? in if let error = task.error { print("Erreur de téléchargement : \\(error.localizedDescription)") } else { print("Fichier téléchargé avec succès : \\(bucketName)/\\(key)") } return nil }}Téléchargement du fichier (download)
func downloadFromS3(bucketName: String, key: String, localURL: URL) { let request = AWSS3TransferManagerDownloadRequest()! request.bucket = bucketName request.key = key request.downloadingFileURL = localURL
let transferManager = AWSS3TransferManager.default() transferManager?.download(request).continueWith { task -> Any? in if let error = task.error { print("Erreur de téléchargement : \\(error.localizedDescription)") } else { print("Fichier sauvegardé dans \\(localURL.path)") } return nil }}Utilisation d'Amplify Storage pour S3
Amplify fournit une API plus simple, masquant les détails du travail avec S3. Il nécessite une configuration préalable via CLI ou le fichier amplifyconfiguration.json.
Installation d'Amplify
// Ajoutez le paquet : https://github.com/aws-ampl