Tipo MIME — cos'è, tipi di file e rilevamento in iOS

Autore: IT Sectr Pubblicato: 2026-07-11 Tempo di lettura: 7 min

Il Tipo MIME è un identificatore standardizzato di formato dati utilizzato in iOS per determinare il tipo di file durante la trasmissione tramite rete, file system e comunicazione tra processi. Secondo la Documentazione per Sviluppatori Apple, 2024, MIME Type (Multipurpose Internet Mail Extensions) classifica i file in base al loro contenuto: image/jpeg, application/pdf, text/plain. iOS converte MIME in UTI (Uniform Type Identifier) tramite UTType per la gestione sistemistica dei file.

Punti Chiave

  • Tipo MIME — identificatore di formato dati in due parti: tipo/sottotipo (image/png)
  • UTType — controparte iOS di MIME, usato internamente per identificare i tipi di file
  • Conversione tra MIME e UTI eseguita tramite UTType.preferredMIMEType
  • Rilevamento MIME possibile per estensione file, contenuto (magic bytes) o intestazione HTTP
  • iOS Sandbox limita l'accesso a file di tipo sconosciuto — è importante registrare correttamente i tipi personalizzati

Cos'è il Tipo MIME?

MIME Type (Multipurpose Internet Mail Extensions) è un identificatore standardizzato di formato dati composto da due parti: un tipo principale (type) e un sottotipo (subtype), separati da una barra. Categorie principali: text (testo), image (immagini), audio, video, application (dati binari), multipart (messaggi compositi).

Lo standard MIME è stato originariamente sviluppato per gli allegati email (RFC 2046, 1996), ma oggi è utilizzato ovunque: i server HTTP specificano il Content-Type delle risposte, i browser determinano come gestire i file e le applicazioni mobili identificano quali dati possono essere aperti. L'IANA (Internet Assigned Numbers Authority) gestisce un registro dei tipi MIME registrati.

Secondo il Registro dei Tipi Media IANA (2024), oltre 1.800 tipi MIME ufficiali sono registrati, e il numero reale inclusi i tipi personalizzati e dei fornitori supera i 5.000. iOS supporta la maggior parte dei tipi standard e fornisce API per lavorare con essi tramite Uniform Type Identifiers.

MIME e UTI in iOS: Differenze e Conversione

UTI (Uniform Type Identifier) è il sistema proprietario di Apple per l'identificazione dei tipi di contenuto utilizzato in iOS e macOS. A differenza di MIME, UTI supporta una gerarchia di ereditarietà (ad esempio, public.image è il genitore di public.png e public.jpeg) e include non solo formati di file ma anche tipi di dati astratti.

Tipo MIMEUTIEstensioneDescrizione
image/jpegpublic.jpeg.jpg, .jpegImmagine JPEG
application/pdfcom.adobe.pdf.pdfDocumento PDF
text/plainpublic.plain-text.txtFile di testo
application/jsonpublic.json.jsonDati JSON
video/mp4public.mpeg-4.mp4Video MP4

Conversione tra MIME e UTI in iOS viene eseguita tramite la classe UTType (iOS 14+). Il sistema mantiene un database interno di mappature che copre la maggior parte dei formati standard. Per i tipi personalizzati, lo sviluppatore registra la mappatura in Info.plist.

swift
import UniformTypeIdentifiers

let mimeType = "image/jpeg"
if let uti = UTType(mimeType: mimeType) {
    print("UTI: \(uti.identifier)")
    print("Conforme all'immagine: \(uti.conforms(to: .image))")
    print("Estensione: \(uti.preferredFilenameExtension ?? "")")
}

// Conversione inversa: UTI a MIME
if let uti = UTType(filenameExtension: "pdf"),
   let mime = uti.preferredMIMEType {
    print("MIME per PDF: \(mime)")
}

Gerarchia UTI permette di verificare se un tipo è conforme a una determinata categoria. Ad esempio, tutti i tipi di immagine (JPEG, PNG, GIF) conform(to: .image). Questo è comodo per il filtraggio di gruppo e per determinare se un tipo può essere gestito dai componenti di sistema.

Differenza importante: MIME è una classificazione piatta (senza ereditarietà), mentre UTI supporta l'ereditarietà multipla. Ad esempio, public.html è conforme sia a public.source-code che a public.text. Ciò fornisce un routing più flessibile durante l'elaborazione dei file in iOS.

Come Determinare il Tipo MIME di un File in iOS

Tre metodi per determinare il Tipo MIME sono disponibili in iOS: per estensione file (veloce ma poco affidabile), per contenuto tramite magic bytes (affidabile ma richiede la lettura del file) e per intestazione HTTP Content-Type (solo per richieste di rete).

swift
import UniformTypeIdentifiers

enum MIMEDetector {
    // Rileva per estensione
    static func fromExtension(_ ext: String) -> String? {
        UTType(filenameExtension: ext)?.preferredMIMEType
    }

    // Rileva per contenuto (magic bytes)
    static func fromFile(at url: URL) -> String? {
        guard let handle = try? FileHandle(forReadingFrom: url) else {
            return nil
        }
        defer { handle.closeFile() }
        let header = handle.readData(ofLength: 12)

        // PNG: 89 50 4E 47 0D 0A 1A 0A
        // JPEG: FF D8 FF
        // PDF: 25 50 44 46
        // ZIP: 50 4B 03 04

        if header.starts(with: [0x89, 0x50, 0x4E, 0x47]) {
            return "image/png"
        }
        if header.starts(with: [0xFF, 0xD8, 0xFF]) {
            return "image/jpeg"
        }
        if header.starts(with: [0x25, 0x50, 0x44, 0x46]) {
            return "application/pdf"
        }
        return nil
    }
}

Rilevamento per estensione tramite UTType è il metodo più veloce, ma non è affidabile se l'estensione è assente o falsificata. Un aggressore potrebbe rinominare .exe in .jpg — il sistema lo identificherebbe come image/jpeg anche se il file è eseguibile. Per scenari critici (sicurezza, dati medici), utilizzare sempre la verifica basata sul contenuto.

Magic bytes sono i primi byte di un file, unici per ogni formato. La maggior parte dei formati ha una firma di 2–12 byte. iOS non fornisce un rilevatore MIME integrato per contenuto — lo sviluppatore implementa una tabella di firme da solo o utilizza librerie come CocoaLumberjack o un rilevatore personalizzato basato su euristiche.

Registrazione di Tipi MIME e UTI Personalizzati

Tipi personalizzati sono necessari quando un'applicazione lavora con formati di dati proprietari non registrati presso IANA o Apple. La registrazione in Info.plist consente a iOS di gestire correttamente tali file: aprirli da Files.app, visualizzare icone e passarli ad altre applicazioni tramite UIActivityViewController.

xml
<key>CFBundleDocumentTypes</key>
<array>
    <dict>
        <key>CFBundleTypeName</key>
        <string>MyApp Document</string>
        <key>LSHandlerRank</key>
        <string>Owner</string>
        <key>LSItemContentTypes</key>
        <array>
            <string>com.myapp.secret-doc</string>
        </array>
    </dict>
</array>
<key>UTExportedTypeDeclarations</key>
<array>
    <dict>
        <key>UTTypeIdentifier</key>
        <string>com.myapp.secret-doc</string>
        <key>UTTypeTagSpecification</key>
        <dict>
            <key>public.filename-extension</key>
            <array><string>sdoc</string></array>
            <key>public.mime-type</key>
            <array><string>application/vnd.myapp.secret-doc</string></array>
        </dict>
    </dict>
</array>

Per registrare un tipo personalizzato, è necessario specificare in Info.plist: l'identificatore UTI (in formato reverse-DNS), la conformità ai tipi genitore, l'estensione file e il tipo MIME. iOS utilizza queste informazioni per il routing dei file: quando un utente apre un file .sdoc, il sistema sa che il suo proprietario è la tua applicazione.

UTExportedTypeDeclarations — per i tipi definiti dalla tua applicazione (esportazione). UTImportedTypeDeclarations — per i tipi creati da altre applicazioni con cui la tua app può lavorare (importazione). Apple raccomanda di registrare tutti i tipi personalizzati con cui la tua applicazione lavora per una corretta integrazione con il sistema.

Sicurezza e Gestione dei Tipi Sconosciuti

Tipi MIME sconosciuti rappresentano un rischio per la sicurezza delle applicazioni iOS. Se un file ha un tipo sconosciuto o non verificato, l'applicazione deve prendere precauzioni: non aprire il file automaticamente, mostrare un avviso all'utente o analizzare il contenuto prima dell'elaborazione.

Principali minacce: un file con tipo MIME falsificato può contenere codice malevolo o un exploit mirato a una vulnerabilità del parser. iOS protegge il sistema tramite Sandbox, ma l'applicazione può essere vulnerabile se si fida del tipo MIME senza verificare il contenuto. Controlla sempre i file tramite magic bytes se provengono da una fonte non attendibile.

Secondo la Guida alla Sicurezza Mobile OWASP, 2024, si applicano le seguenti pratiche per la gestione dei file di tipo sconosciuto: rifiutare file con tipo MIME application/octet-stream da fonti non attendibili; utilizzare UTType per verificare la conformità alle categorie previste; non aprire file in applicazioni esterne senza conferma dell'utente; registrare tutti i casi di disallineamento tra MIME e contenuto effettivo per audit di sicurezza.

Registrazione di tipi MIME personalizzati in Info.plist non è solo funzionalità ma anche sicurezza. Se un'applicazione registra correttamente solo i propri tipi, il sistema non le passerà erroneamente altri file. Utilizza prefissi fornitore specifici (application/vnd.company.app-format) invece di prefissi generici (application/x-format) per evitare conflitti con altre applicazioni.

Domande Frequenti

Cos'è il Tipo MIME?

MIME Type è un identificatore standard di formato dati composto da un tipo e un sottotipo (ad esempio, image/jpeg). È utilizzato da server HTTP, browser e applicazioni per determinare come gestire un file.

In cosa UTI differisce da MIME in iOS?

UTI (Uniform Type Identifier) è il sistema di Apple per identificare i tipi di contenuto con supporto per una gerarchia di ereditarietà. MIME è uno standard piatto per la rete. iOS utilizza UTType per la conversione tra UTI e MIME tramite la proprietà preferredMIMEType.

Come determinare il Tipo MIME di un file in iOS?

Tre modi: per estensione tramite UTType(filenameExtension:), per contenuto tramite magic bytes (primi byte del file), per intestazione HTTP Content-Type. Per sicurezza, utilizza la verifica basata sul contenuto piuttosto che solo l'estensione.

Come registrare un tipo MIME personalizzato in iOS?

Aggiungi UTExportedTypeDeclarations a Info.plist: specifica l'identificatore UTI (com.company.formato), l'estensione file, il tipo MIME e il tipo genitore. I file con questa estensione saranno automaticamente associati alla tua applicazione.

Cosa fare con i tipi MIME sconosciuti?

Non fidarti di un MIME sconosciuto. Verifica il contenuto tramite magic bytes, mostra un avviso all'utente e non aprire il file automaticamente. Per i file di tipo application/octet-stream, esegui sempre un'analisi euristica prima dell'elaborazione.

Riepilogo

  • Tipo MIME — identificatore standardizzato di formato dati (tipo/sottotipo) utilizzato in HTTP e iOS
  • UTType — API iOS per lavorare con i tipi di contenuto, supporta gerarchia e conversione MIME→UTI
  • Rilevamento tipo effettuato per estensione, magic bytes o intestazione HTTP Content-Type
  • Tipi personalizzati registrati in Info.plist tramite UTExportedTypeDeclarations
  • Sicurezza richiede verifica del contenuto — il MIME dall'intestazione può essere falsificato
  • Gerarchia UTI permette di verificare la categoria del file (immagine, testo, video) tramite conforms(to:)
  • Application/octet-stream — tipo universale per dati binari sconosciuti, richiede analisi euristica

Svilupperemo un'applicazione mobile chiavi in mano

IT Sectr crea applicazioni iOS e Android per startup e aziende dal 2017. Ti consulteremo e ti proporremo la soluzione migliore.

Discuti il progetto

Leggi anche