Trabalhando com S3 e armazenamento em nuvem em Swift (iOS/macOS): AWSS3 e Amplify

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Trabalhando com S3 e armazenamento em nuvem em Swift (iOS/macOS)



No desenvolvimento moderno de aplicativos móveis e desktop em Swift, surge frequentemente a necessidade de armazenar e transferir grandes volumes de dados: imagens, vídeos, documentos de usuários. O Amazon S3 (Simple Storage Service) é uma das soluções de nuvem mais populares para essas tarefas. Neste artigo, vamos abordar como integrar o S3 em aplicativos Swift para iOS e macOS usando o SDK oficial da Amazon — AWSS3, além de considerar uma abordagem de nível mais alto através do framework Amplify.



Por que usar S3 em aplicativos Swift?

O S3 fornece um armazenamento de objetos escalável, seguro e de baixo custo. Usar o S3 em Swift permite:

  • Descarregar a carga de armazenamento de arquivos do dispositivo para a nuvem.
  • Garantir acesso aos dados de qualquer dispositivo do usuário.
  • Utilizar mecanismos integrados de criptografia e controle de acesso.
  • Integrar-se com outros serviços da AWS (Lambda, Cognito, CloudFront).


Configuração do ambiente

Para começar, você precisará de:

  • Uma conta AWS e um bucket S3 criado.
  • Xcode 14+ e um projeto em Swift (iOS 15+ / macOS 12+).
  • Instalação de dependências via Swift Package Manager (SPM).


Instalação do AWSS3 via SPM

Adicione o pacote no Package.swift ou através da interface do Xcode:

// File → Add Packages → pesquisa: https://github.com/aws-amplify/aws-sdk-ios-spm// Selecione "AWSS3" na lista de produtos.

No código, importe a biblioteca:

import AWSS3


Exemplo básico: upload de arquivo para S3

Vamos considerar o cenário mais simples — upload de uma imagem da galeria do usuário. Para autenticação, usa-se o Cognito Identity Pool, mas em modo de teste é possível passar as chaves diretamente (não recomendado para produção).



Configuração do serviço

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


Upload de arquivo

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("Erro no upload: \\(error.localizedDescription)") } else { print("Arquivo enviado com sucesso: \\(bucketName)/\\(key)") } return nil }}


Download de arquivo

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("Erro no download: \\(error.localizedDescription)") } else { print("Arquivo salvo em \\(localURL.path)") } return nil }}


Usando Amplify Storage para S3

O Amplify fornece uma API mais simples, ocultando os detalhes de trabalho com o S3. Ele requer configuração prévia via CLI ou arquivo amplifyconfiguration.json.



Instalação do Amplify

// Adicione o pacote: https://github.com/aws-ampl                    

Recommendations