Trabajo con S3 y almacenamiento en la nube en Swift (iOS/macOS): librería AWSS3

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Trabajo con S3 y almacenamiento en la nube en Swift (iOS/macOS)



En el desarrollo moderno para iOS y macOS, a menudo surge la necesidad de integrar almacenamiento en la nube compatible con el protocolo Amazon S3 (Simple Storage Service). Puede ser tanto el AWS S3 oficial como soluciones self-hosted como MinIO o DigitalOcean Spaces. Para Swift existe una potente herramienta: la librería AWSS3 del AWS SDK for Swift, que permite gestionar fácilmente objetos en buckets: cargar, descargar, eliminar y obtener metadatos.



En este artículo, analizaremos cómo configurar AWSS3 en un proyecto, realizar operaciones básicas con archivos y manejar posibles errores. El material es adecuado para aplicaciones iOS y macOS escritas en Swift 5.7+.



Instalación y configuración de AWSS3



Para trabajar con AWSS3, es necesario agregar la dependencia mediante Swift Package Manager (SPM) o CocoaPods. Consideremos SPM, la forma más moderna.



  1. Abra Xcode, vaya a File → Add Packages...
  2. Ingrese la URL del repositorio: https://github.com/awslabs/aws-sdk-swift.git
  3. Seleccione el paquete AWSS3 e indique la versión (se recomienda la última estable).
  4. Agregue el paquete al target deseado.


Después de la instalación, importe el módulo en el archivo donde se trabajará con el almacenamiento:



import AWSS3


Configuración del cliente S3



Para conectarse a un almacenamiento compatible con S3, es necesario crear una configuración con las credenciales (Access Key, Secret Key) y un endpoint. Para AWS S3, el endpoint no es necesario especificarlo — el SDK determinará automáticamente la región. Para MinIO u otros servicios, el endpoint es obligatorio.



// Ejemplo de configuración para MinIO (servidor local)let endpoint = "http://localhost:9000"let accessKey = "YOUR_ACCESS_KEY"let secretKey = "YOUR_SECRET_KEY"

let credentials = AWSCredentials(accessKey: accessKey, secretAccessKey: secretKey)let region = AWSRegion.useast1 // u otra región

let configuration = AWSS3Configuration( region: region, endpoint: endpoint, credentialsProvider: .static(credentials), useFIPS: false, useDualStack: false)

let s3Client = try await AWSS3Client(configuration: configuration)


Para AWS S3, la configuración es más simple — basta con indicar la región y obtener las credenciales desde un rol IAM o variables de entorno:



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


Operaciones básicas con objetos S3



1. Carga de archivo (Upload)



Para cargar datos en un bucket, use el método putObject. Los datos pueden ser Data, String o un flujo.



func uploadFile(bucket: String, key: String, data: Data) async throws {    let putObjectInput = PutObjectInput(        body: .data(data),        bucket: bucket,        key: key    )    let response = try await s3Client.putObject(input: putObjectInput)    print("Archivo cargado. ETag: \\(response.eTag ?? "desconocido")")}


2. Descarga de archivo (Download)



Para obtener un objeto, use getObject:



func downloadFile(bucket: String, key: String) async throws -> Data {    let getObjectInput = GetObjectInput(        bucket: bucket,        key: key    )    let response = try await s3Client.getObject(input: getObjectInput)    guard let body = response.body else {        throw NSError(domain: "S3Error", code: -1, userInfo: [NSLocalizedDescriptionKey: "Cuerpo de respuesta vacío"])    }    let data = try await body.readData()    return data}


3. Obtención de la lista de objetos en el bucket



El método listObjectsV2 devuelve una lista de claves (nombres de archivos) en el bucket:




                
    
    

Recommendations