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

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 de aplicaciones móviles y de escritorio en Swift, a menudo surge la necesidad de almacenar y transferir grandes volúmenes de datos: imágenes, videos, documentos de usuarios. Amazon S3 (Simple Storage Service) es una de las soluciones en la nube más populares para estas tareas. En este artículo, analizaremos cómo integrar S3 en aplicaciones Swift para iOS y macOS utilizando el SDK oficial de Amazon — AWSS3, y también consideraremos un enfoque de más alto nivel a través del framework Amplify.



¿Por qué necesitas S3 en aplicaciones Swift?

S3 proporciona un almacenamiento de objetos escalable, seguro y de bajo costo. El uso de S3 en Swift permite:

  • Descargar la carga de almacenamiento de archivos del dispositivo a la nube.
  • Garantizar el acceso a los datos desde cualquier dispositivo del usuario.
  • Utilizar mecanismos integrados de cifrado y control de acceso.
  • Integrarse con otros servicios de AWS (Lambda, Cognito, CloudFront).


Configuración del entorno

Para comenzar, necesitarás:

  • Una cuenta de AWS y un bucket S3 creado.
  • Xcode 14+ y un proyecto en Swift (iOS 15+ / macOS 12+).
  • Instalación de dependencias a través de Swift Package Manager (SPM).


Instalación de AWSS3 mediante SPM

Agrega el paquete en Package.swift o a través de la interfaz de Xcode:

// File → Add Packages → buscar: https://github.com/aws-amplify/aws-sdk-ios-spm// Selecciona "AWSS3" en la lista de productos.

En el código, importa la librería:

import AWSS3


Ejemplo básico: carga de un archivo a S3

Consideremos el escenario más simple: cargar una imagen desde la galería del usuario. Para la autenticación se utiliza Cognito Identity Pool, pero en modo de prueba se pueden pasar las claves directamente (no recomendado para producción).



Configuración del servicio

let credentialsProvider = AWSStaticCredentialsProvider(    accessKey: "YOUR_ACCESS_KEY",    secretKey: "YOUR_SECRET_KEY")let configuration = AWSServiceConfiguration(    region: .USEast1,    credentialsProvider: credentialsProvider)AWSServiceManager.default().defaultServiceConfiguration = configuration


Carga de archivo (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("Error de carga: \\(error.localizedDescription)") } else { print("Archivo cargado exitosamente: \\(bucketName)/\\(key)") } return nil }}


Descarga de archivo (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("Error de descarga: \\(error.localizedDescription)") } else { print("Archivo guardado en \\(localURL.path)") } return nil }}


Uso de Amplify Storage para S3

Amplify proporciona una API más simple, ocultando los detalles de trabajo con S3. Requiere una configuración previa a través de la CLI o del archivo amplifyconfiguration.json.



Instalación de Amplify

// Agrega el paquete: https://github.com/aws-ampl                    

Recommendations