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.