Trabalhando com S3 e armazenamentos em nuvem em Swift (iOS/macOS): biblioteca AWSS3

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 armazenamentos em nuvem em Swift (iOS/macOS)



No desenvolvimento moderno para iOS e macOS, surge frequentemente a necessidade de integrar armazenamentos em nuvem compatíveis com o protocolo Amazon S3 (Simple Storage Service). Pode ser tanto o AWS S3 oficial quanto soluções self-hosted como MinIO ou DigitalOcean Spaces. Para Swift, existe uma ferramenta poderosa — a biblioteca AWSS3 do AWS SDK for Swift, que permite gerenciar facilmente objetos em buckets: fazer upload, download, excluir e obter metadados.



Neste artigo, vamos abordar como configurar o AWSS3 em um projeto, realizar operações básicas com arquivos e tratar possíveis erros. O material é adequado para aplicativos iOS e macOS escritos em Swift 5.7+.



Instalação e configuração do AWSS3



Para trabalhar com o AWSS3, é necessário adicionar a dependência via Swift Package Manager (SPM) ou CocoaPods. Vamos considerar o SPM — a forma mais moderna.



  1. Abra o Xcode, vá em File → Add Packages...
  2. Insira a URL do repositório: https://github.com/awslabs/aws-sdk-swift.git
  3. Selecione o pacote AWSS3 e especifique a versão (recomenda-se a última estável).
  4. Adicione o pacote ao target desejado.


Após a instalação, importe o módulo no arquivo onde ocorrerá o trabalho com o armazenamento:



import AWSS3


Configuração do cliente S3



Para conectar-se a um armazenamento compatível com S3, é necessário criar uma configuração com credenciais (Access Key, Secret Key) e endpoint. Para AWS S3, o endpoint pode ser omitido — o SDK determina automaticamente a região. Para MinIO ou outros serviços, o endpoint é obrigatório.



// Exemplo de configuração 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 // ou outra região

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

let s3Client = try await AWSS3Client(configuration: configuration)


Para AWS S3, a configuração é mais simples — basta especificar a região e obter as credenciais de uma IAM role ou variáveis de ambiente:



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


Operações principais com objetos S3



1. Upload de arquivo



Para fazer upload de dados para um bucket, use o método putObject. Os dados podem ser Data, String ou um stream.



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("Arquivo enviado. ETag: \\(response.eTag ?? "desconhecido")")}


2. Download de arquivo



Para obter um 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: "Corpo da resposta vazio"])    }    let data = try await body.readData()    return data}


3. Listagem de objetos em um bucket



O método listObjectsV2 retorna uma lista de chaves (nomes de arquivos) no bucket:




                
    
    

Recommendations