Travailler avec S3 et les stockages cloud en Swift (iOS/macOS) : la bibliothèque AWSS3

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Travailler avec S3 et les stockages cloud en Swift (iOS/macOS)

\n\n

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

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

Installation et configuration d'AWSS3

\n\n

Pour 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
  1. Ouvrez Xcode, allez dans File → Add Packages...
  2. \n
  3. Entrez l'URL du dépôt : https://github.com/awslabs/aws-sdk-swift.git
  4. \n
  5. Sélectionnez le paquet AWSS3 et spécifiez la version (la dernière version stable est recommandée).
  6. \n
  7. Ajoutez le paquet à la cible souhaitée.
  8. \n
\n\n

Après l'installation, importez le module dans le fichier où vous travaillerez avec le stockage :

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

Configuration du client S3

\n\n

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

Pour 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\n
let configuration = AWSS3Configuration(\n    region: .useast1,\n    credentialsProvider: .default\n)\nlet s3Client = try await AWSS3Client(configuration: configuration)\n
\n\n

Opérations de base avec les objets S3

\n\n

1. Upload de fichier

\n\n

Pour uploader des données dans un bucket, utilisez la méthode putObject. Les données peuvent être de type Data, String ou un flux.

\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("Fichier uploadé. ETag : \\(response.eTag ?? "inconnu")")\n}\n
\n\n

2. Téléchargement de fichier

\n\n

Pour obtenir un objet, utilisez 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: "Corps de réponse vide"])\n    }\n    let data = try await body.readData()\n    return data\n}\n
\n\n

3. Obtention de la liste des objets dans un bucket

\n\n

La méthode listObjectsV2 retourne une liste de clés (noms de fichiers) dans le bucket :

\n\n

                
    
    

Recommendations