Der MIME-Typ ist ein standardisierter Datenformatidentifikator, der in iOS verwendet wird, um den Dateityp bei der Übertragung über Netzwerk, Dateisystem und Interprozesskommunikation zu bestimmen. Laut Apple Developer Documentation, 2024 klassifiziert MIME-Typ (Multipurpose Internet Mail Extensions) Dateien nach ihrem Inhalt: image/jpeg, application/pdf, text/plain. iOS konvertiert MIME in UTI (Uniform Type Identifier) über UTType zur systemseitigen Dateiverarbeitung.
Wichtige Punkte
MIME-Typ (Multipurpose Internet Mail Extensions) ist ein standardisierter Datenformatidentifikator, der aus zwei Teilen besteht: einem Haupttyp (type) und einem Subtyp (subtype), getrennt durch einen Schrägstrich. Hauptkategorien: text (Text), image (Bilder), audio, video, application (Binärdaten), multipart (zusammengesetzte Nachrichten).
Der MIME-Standard wurde ursprünglich für E-Mail-Anhänge entwickelt (RFC 2046, 1996), wird aber heute überall verwendet: HTTP-Server geben den Content-Type von Antworten an, Browser bestimmen, wie Dateien zu behandeln sind, und mobile Anwendungen identifizieren, welche Daten geöffnet werden können. Die IANA (Internet Assigned Numbers Authority) führt ein Register der eingetragenen MIME-Typen.
Laut IANA Media Types Registry (2024) sind über 1.800 offizielle MIME-Typen registriert, und die tatsächliche Anzahl einschließlich benutzerdefinierter und Anbieter-Typen übersteigt 5.000. iOS unterstützt die meisten Standardtypen und bietet APIs für die Arbeit mit ihnen über Uniform Type Identifiers.
UTI (Uniform Type Identifier) ist Apples eigenes Inhalts-Typ-Identifikationssystem, das in iOS und macOS verwendet wird. Im Gegensatz zu MIME unterstützt UTI eine Vererbungshierarchie (z.B. public.image ist der Eltern von public.png und public.jpeg) und umfasst nicht nur Dateiformate, sondern auch abstrakte Datentypen.
| MIME-Typ | UTI | Erweiterung | Beschreibung |
|---|---|---|---|
| image/jpeg | public.jpeg | .jpg, .jpeg | JPEG-Bild |
| application/pdf | com.adobe.pdf | PDF-Dokument | |
| text/plain | public.plain-text | .txt | Textdatei |
| application/json | public.json | .json | JSON-Daten |
| video/mp4 | public.mpeg-4 | .mp4 | MP4-Video |
Konvertierung zwischen MIME und UTI in iOS erfolgt über die UTType-Klasse (iOS 14+). Das System unterhält eine interne Mapping-Datenbank, die die meisten Standardformate abdeckt. Für benutzerdefinierte Typen registriert der Entwickler das Mapping in Info.plist.
import UniformTypeIdentifiers
let mimeType = "image/jpeg"
if let uti = UTType(mimeType: mimeType) {
print("UTI: \(uti.identifier)")
print("Entspricht Bild: \(uti.conforms(to: .image))")
print("Erweiterung: \(uti.preferredFilenameExtension ?? "")")
}
// Rückwärtskonvertierung: UTI zu MIME
if let uti = UTType(filenameExtension: "pdf"),
let mime = uti.preferredMIMEType {
print("MIME für PDF: \(mime)")
}
UTI-Hierarchie ermöglicht die Überprüfung, ob ein Typ einer bestimmten Kategorie entspricht. Zum Beispiel konformieren alle Bildtypen (JPEG, PNG, GIF) zu (to: .image). Dies ist nützlich für die Gruppenfilterung und die Bestimmung, ob ein Typ von Systemkomponenten verarbeitet werden kann.
Wichtiger Unterschied: MIME ist eine flache Klassifikation (keine Vererbung), während UTI Mehrfachvererbung unterstützt. Zum Beispiel konformiert public.html sowohl zu public.source-code als auch zu public.text. Dies ermöglicht ein flexibleres Routing bei der Dateiverarbeitung in iOS.
Drei Methoden zur Bestimmung des MIME-Typs stehen in iOS zur Verfügung: durch Dateierweiterung (schnell, aber unzuverlässig), durch Inhalt über magic bytes (zuverlässig, erfordert aber Lesen der Datei) und durch HTTP-Content-Type-Header (nur für Netzwerkanfragen).
import UniformTypeIdentifiers
enum MIMEDetector {
// Durch Erweiterung erkennen
static func fromExtension(_ ext: String) -> String? {
UTType(filenameExtension: ext)?.preferredMIMEType
}
// Durch Inhalt erkennen (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
}
}
Erkennung durch Erweiterung über UTType ist die schnellste Methode, aber sie ist unzuverlässig, wenn die Erweiterung fehlt oder gefälscht ist. Ein Angreifer könnte .exe in .jpg umbenennen — das System würde es als image/jpeg identifizieren, obwohl die Datei ausführbar ist. Für kritische Szenarien (Sicherheit, medizinische Daten) verwenden Sie immer eine inhaltsbasierte Überprüfung.
Magic bytes sind die ersten Bytes einer Datei, die für jedes Format einzigartig sind. Die meisten Formate haben eine Signatur von 2–12 Bytes. iOS bietet keinen integrierten MIME-Detektor nach Inhalt — der Entwickler implementiert entweder selbst eine Signaturtabelle oder verwendet Bibliotheken wie CocoaLumberjack oder einen benutzerdefinierten heuristikbasierten Detektor.
Benutzerdefinierte Typen sind erforderlich, wenn eine Anwendung mit proprietären Datenformaten arbeitet, die nicht bei IANA oder Apple registriert sind. Die Registrierung in Info.plist ermöglicht iOS, solche Dateien korrekt zu behandeln: sie aus Files.app zu öffnen, Symbole anzuzeigen und sie über UIActivityViewController an andere Anwendungen weiterzugeben.
<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>
Um einen benutzerdefinierten Typ zu registrieren, müssen Sie in Info.plist angeben: die UTI-Kennung (im Reverse-DNS-Format), die Konformität mit Eltern-Typen, die Dateierweiterung und den MIME-Typ. iOS verwendet diese Informationen für das Datei-Routing: Wenn ein Benutzer eine .sdoc-Datei öffnet, weiß das System, dass ihr Eigentümer Ihre Anwendung ist.
UTExportedTypeDeclarations — für Typen, die von Ihrer Anwendung definiert werden (Export). UTImportedTypeDeclarations — für Typen, die von anderen Anwendungen erstellt wurden und mit denen Ihre App arbeiten kann (Import). Apple empfiehlt, alle benutzerdefinierten Typen zu registrieren, mit denen Ihre Anwendung arbeitet, für eine korrekte Systemintegration.
Unbekannte MIME-Typen stellen ein Sicherheitsrisiko für iOS-Anwendungen dar. Wenn eine Datei einen unbekannten oder nicht verifizierten Typ hat, sollte die Anwendung Vorsichtsmaßnahmen treffen: die Datei nicht automatisch öffnen, eine Warnung an den Benutzer anzeigen oder den Inhalt vor der Verarbeitung analysieren.
Hauptbedrohungen: Eine Datei mit gefälschtem MIME-Typ kann bösartigen Code oder einen Exploit für eine Parser-Schwachstelle enthalten. iOS schützt das System durch Sandbox, aber die Anwendung kann verwundbar sein, wenn sie dem MIME-Typ ohne Überprüfung des Inhalts vertraut. Überprüfen Sie Dateien immer anhand von magic bytes, wenn sie aus einer nicht vertrauenswürdigen Quelle stammen.
Laut OWASP Mobile Security Guide, 2024 gelten folgende Praktiken für den Umgang mit Dateien unbekannter Typen: Dateien mit MIME-Typ application/octet-stream aus nicht vertrauenswürdigen Quellen ablehnen; UTType zur Überprüfung der Konformität mit erwarteten Kategorien verwenden; Dateien nicht ohne Benutzerbestätigung in externen Anwendungen öffnen; alle Fälle von Nichtübereinstimmung zwischen MIME und tatsächlichem Inhalt für Sicherheitsaudits protokollieren.
Benutzerdefinierte MIME-Typen-Registrierung in Info.plist ist nicht nur Funktionalität, sondern auch Sicherheit. Wenn eine Anwendung nur ihre eigenen Typen korrekt registriert, wird das System nicht versehentlich andere Dateien an sie weiterleiten. Verwenden Sie spezifische Anbieterpräfixe (application/vnd.company.app-format) anstelle von generischen (application/x-format), um Konflikte mit anderen Anwendungen zu vermeiden.
Häufig gestellte Fragen
MIME-Typ ist ein standardisierter Datenformatidentifikator, der aus einem Typ und Subtyp (z.B. image/jpeg) besteht. Er wird von HTTP-Servern, Browsern und Anwendungen verwendet, um zu bestimmen, wie eine Datei zu behandeln ist.
UTI (Uniform Type Identifier) ist Apples System zur Identifizierung von Inhaltstypen mit Unterstützung für eine Vererbungshierarchie. MIME ist ein flacher Standard für das Netzwerk. iOS verwendet UTType für die Konvertierung zwischen UTI und MIME über die preferredMIMEType-Eigenschaft.
Drei Wege: durch Erweiterung über UTType(filenameExtension:), durch Inhalt über magic bytes (erste Bytes der Datei), durch HTTP-Header Content-Type. Verwenden Sie aus Sicherheitsgründen eine inhaltsbasierte Überprüfung anstatt nur der Erweiterung.
Fügen Sie UTExportedTypeDeclarations zu Info.plist hinzu: geben Sie die UTI-Kennung (com.company.format), Dateierweiterung, MIME-Typ und Eltern-Typ an. Dateien mit dieser Erweiterung werden automatisch Ihrer Anwendung zugeordnet.
Vertrauen Sie einem unbekannten MIME nicht. Überprüfen Sie den Inhalt anhand von magic bytes, zeigen Sie eine Warnung an den Benutzer an und öffnen Sie die Datei nicht automatisch. Führen Sie bei Dateien vom Typ application/octet-stream immer eine heuristische Analyse vor der Verarbeitung durch.
Zusammenfassung
Wir entwickeln eine mobile Applikation schlüsselfertig
IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.
Lesen Sie auch