Gestire File Pesanti Senza Crash di Memoria (OOM)

Le fotocamere degli ultimi modelli di iPhone generano foto da 48MP che pesano 15-25 MB ciascuna. Se provi a inviare un'immagine di queste dimensioni non compressa, l'app consumerà troppa RAM e l'upload fallirà sulle reti mobili lente.

Codice Pratico: Image Compression & Background Upload in Swift

import SwiftUI
import PhotosUI

final class MediaUploadService {
    static let shared = MediaUploadService()
    
    func prepareAndCompressImage(from image: UIImage, maxDimension: CGFloat = 1920, compressionQuality: CGFloat = 0.75) -> Data? {
        // Ridimensionamento mantenendo l'aspect ratio
        let size = image.size
        let ratio = min(maxDimension / size.width, maxDimension / size.height)
        
        let newSize = (ratio < 1.0) ? CGSize(width: size.width * ratio, height: size.height * ratio) : size
        
        let renderer = UIGraphicsImageRenderer(size: newSize)
        let resizedImage = renderer.image { _ in
            image.draw(in: CGRect(origin: .zero, size: newSize))
        }
        
        // Conversione JPEG ad alta efficienza (peso tipico: 200-400 KB)
        return resizedImage.jpegData(compressionQuality: compressionQuality)
    }
    
    func uploadChunked(data: Data, uploadURL: URL, progress: @escaping (Double) -> Void) async throws -> String {
        var request = URLRequest(url: uploadURL)
        request.httpMethod = "POST"
        request.setValue("application/octet-stream", forHTTPHeaderField: "Content-Type")
        
        let (responseData, response) = try await URLSession.shared.upload(for: request, from: data)
        guard let httpResponse = response as? HTTPURLResponse, httpResponse.statusCode == 200 else {
            throw URLError(.badServerResponse)
        }
        
        return String(data: responseData, encoding: .utf8) ?? ""
    }
}

Vuoi creare la tua App o hai bisogno di consulenza personalizzata?

Sviluppo app iOS native in SwiftUI, piattaforme backend scalabili e offro supporto strategico per monetizzazione e progetti internazionali.

Diallo Yunus

Diallo Yunus

Indie iOS & macOS Developer, Fondatore di DialloDev e autore di 11+ app pubblicate su Apple App Store. Aiuto startup, creator e aziende a costruire prodotti digitali di successo.