MIME Type — co to je, typy souborů a určení v iOS

Autor: IT Sectr Publikováno: 2026-07-11 Doba čtení: 7 min

MIME Type — je standardizovaný identifikátor formátu dat, používaný v iOS k určení typu souboru při přenosu přes síť, souborový systém a meziprocesovou komunikaci. Podle Apple Developer Documentation, 2024, MIME Type (Multipurpose Internet Mail Extensions) klasifikuje soubory podle jejich obsahu: image/jpeg, application/pdf, text/plain. iOS převádí MIME na UTI (Uniform Type Identifier) přes UTType pro systémové zpracování souborů.

Hlavní body

  • MIME Type — identifikátor formátu dat ze dvou částí: typ/podtyp (image/png)
  • UTType — iOS obdoba MIME, používaná interně systémem k identifikaci typů souborů
  • Konverze mezi MIME a UTI se provádí přes UTType.preferredMIMEType
  • Určení MIME je možné podle přípony souboru, obsahu (magic bytes) nebo HTTP hlavičky
  • iOS Sandbox omezuje přístup k souborům neznámých typů — je důležité správně registrovat vlastní typy

Co je MIME Type?

MIME Type (Multipurpose Internet Mail Extensions) — je standardizovaný identifikátor formátu dat sestávající ze dvou částí: hlavního typu (type) a podtypu (subtype), oddělených lomítkem. Hlavní kategorie: text (text), image (obrázky), audio (zvuk), video (video), application (binární data), multipart (složené zprávy).

Standard MIME byl původně vyvinut pro e-mailové přílohy (RFC 2046, 1996), ale dnes se používá všude: HTTP servery uvádějí Content-Type odpovědi, prohlížeče určují, jak zpracovat soubory, a mobilní aplikace — jaká data lze otevřít. IANA (Internet Assigned Numbers Authority) vede registr registrovaných MIME typů.

Podle IANA Media Types Registry (2024) je registrováno více než 1800 oficiálních MIME typů a skutečný počet včetně vlastních a vendorských typů přesahuje 5000. iOS podporuje většinu standardních typů a poskytuje API pro práci s nimi prostřednictvím Uniform Type Identifiers.

MIME a UTI v iOS: rozdíly a konverze

UTI (Uniform Type Identifier) — je vlastní systém identifikace typů obsahu společnosti Apple, používaný uvnitř iOS a macOS. Na rozdíl od MIME, UTI podporuje hierarchii dědičnosti (např. public.image — rodič pro public.png a public.jpeg) a zahrnuje nejen formáty souborů, ale také abstraktní typy dat.

MIME TypeUTIPříponaPopis
image/jpegpublic.jpeg.jpg, .jpegObrázek JPEG
application/pdfcom.adobe.pdf.pdfDokument PDF
text/plainpublic.plain-text.txtTextový soubor
application/jsonpublic.json.jsonJSON data
video/mp4public.mpeg-4.mp4Video MP4

Konverze mezi MIME a UTI v iOS se provádí přes třídu UTType (iOS 14+). Systém udržuje interní databázi shod, která pokrývá většinu standardních formátů. Pro vlastní typy vývojář registruje shodu v Info.plist.

swift
import UniformTypeIdentifiers

let mimeType = "image/jpeg"
if let uti = UTType(mimeType: mimeType) {
    print("UTI: \(uti.identifier)")
    print("Conforms to image: \(uti.conforms(to: .image))")
    print("Extension: \(uti.preferredFilenameExtension ?? "")")
}

// Zpětná konverze: UTI na MIME
if let uti = UTType(filenameExtension: "pdf"),
   let mime = uti.preferredMIMEType {
    print("MIME for PDF: \(mime)")
}

Hierarchie UTI umožňuje kontrolovat, zda typ odpovídá určité kategorii. Například všechny typy obrázků (JPEG, PNG, GIF) conforms(to: .image). To je vhodné pro skupinové filtrování a určení schopnosti zpracování typu systémovými komponentami.

Důležitý rozdíl: MIME — je plochá klasifikace (bez dědičnosti), zatímco UTI podporuje vícenásobnou dědičnost. Například public.html odpovídá jak public.source-code, tak public.text. To poskytuje flexibilnější směrování při zpracování souborů v iOS.

Jak určit MIME Type souboru v iOS

Tři metody určení MIME Type jsou k dispozici v iOS: podle přípony souboru (rychlé, ale nespolehlivé), podle obsahu přes magic bytes (spolehlivé, ale vyžaduje čtení souboru) a podle HTTP hlavičky Content-Type (pouze pro síťové požadavky).

swift
import UniformTypeIdentifiers

enum MIMEDetector {
    // Detekovat podle přípony
    static func fromExtension(_ ext: String) -> String? {
        UTType(filenameExtension: ext)?.preferredMIMEType
    }

    // Detekovat podle obsahu (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
    }
}

Určení podle přípony přes UTType — nejrychlejší metoda, ale je nespolehlivá, pokud přípona chybí nebo je zfalšovaná. Útočník může přejmenovat .exe na .jpg — systém určí image/jpeg, přestože je soubor spustitelný. Pro kritické scénáře (bezpečnost, lékařská data) povinně používejte kontrolu podle obsahu.

Magic bytes — jsou první bajty souboru, jedinečné pro každý formát. Většina formátů má podpis o délce 2–12 bajtů. iOS neposkytuje vestavěný detektor MIME podle obsahu — vývojář buď implementuje tabulku podpisů sám, nebo používá knihovny jako CocoaLumberjack nebo vlastní detektor založený na heuristikách.

Registrace vlastních typů MIME a UTI

Vlastní typy jsou nezbytné, když aplikace pracuje s proprietárními formáty dat, které nejsou registrovány v IANA nebo Apple. Registrace v Info.plist umožňuje iOS správně zpracovávat takové soubory: otevírat je z Files.app, zobrazovat ikony a předávat je jiným aplikacím přes 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>

Pro registraci vlastního typu je třeba uvést v Info.plist: identifikátor UTI (ve formátu reverse-DNS), shodu s nadřazenými typy, příponu souboru a MIME typ. iOS tyto informace používá pro směrování souborů: když uživatel otevře soubor .sdoc, systém ví, že jeho vlastníkem je vaše aplikace.

UTExportedTypeDeclarations — pro typy definované vaší aplikací (export). UTImportedTypeDeclarations — pro typy vytvořené jinými aplikacemi, se kterými může vaše aplikace pracovat (import). Apple doporučuje registrovat všechny vlastní typy, se kterými aplikace pracuje, pro správnou integraci se systémem.

Bezpečnost a zpracování neznámých typů

Neznámé MIME typy představují riziko pro bezpečnost iOS aplikace. Pokud má soubor neznámý nebo neověřený typ, aplikace by měla přijmout opatření: neotevírat soubor automaticky, zobrazit varování uživateli nebo analyzovat obsah před zpracováním.

Hlavní hrozby: soubor s falešným MIME typem může obsahovat škodlivý kód nebo exploit pro zranitelnost analyzátoru. iOS chrání systém přes Sandbox, ale aplikace může být zranitelná, pokud důvěřuje MIME typu bez kontroly obsahu. Vždy kontrolujte soubor podle magic bytes, pokud pochází z nedůvěryhodného zdroje.

Podle OWASP Mobile Security Guide, 2024 se pro zpracování souborů neznámých typů používají následující postupy: odmítejte soubory s MIME typem application/octet-stream z neověřených zdrojů; používejte UTType pro kontrolu shody s očekávanými kategoriemi; neotevírejte soubory ve vnějších aplikacích bez potvrzení uživatele; zaznamenávejte všechny případy nesouladu mezi MIME a skutečným obsahem pro bezpečnostní audit.

Registrace vlastních MIME typů v Info.plist — není jen funkčnost, ale také bezpečnost. Pokud aplikace registruje správně pouze své typy, systém jí nebude omylem posílat cizí soubory. Používejte specifické vendorské prefixy (application/vnd.company.app-format) místo obecných (application/x-format), abyste předešli konfliktům s jinými aplikacemi.

Často kladené otázky

Co je MIME Type?

MIME Type — je standardní identifikátor formátu dat sestávající z typu a podtypu (například image/jpeg). Používá se HTTP servery, prohlížeči a aplikacemi k určení způsobu zpracování souboru.

Čím se UTI liší od MIME v iOS?

UTI (Uniform Type Identifier) — systém Apple pro identifikaci typů obsahu s podporou hierarchie dědičnosti. MIME — plochý standard pro síť. iOS používá UTType pro konverzi mezi UTI a MIME přes vlastnost preferredMIMEType.

Jak určit MIME Type souboru v iOS?

Tři způsoby: podle přípony přes UTType(filenameExtension:), podle obsahu přes magic bytes (první bajty souboru), podle HTTP hlavičky Content-Type. Pro bezpečnost používejte kontrolu podle obsahu, nejen podle přípony.

Jak zaregistrovat vlastní MIME typ v iOS?

Přidejte UTExportedTypeDeclarations do Info.plist: uveďte identifikátor UTI (com.company.format), příponu souboru, MIME typ a nadřazený typ. Soubory s touto příponou budou automaticky asociovány s vaší aplikací.

Co dělat s neznámými MIME typy?

Nedůvěřujte neznámému MIME. Zkontrolujte obsah podle magic bytes, zobrazte varování uživateli a neotevírejte soubor automaticky. Pro soubory typu application/octet-stream vždy proveďte heuristickou analýzu před zpracováním.

Shrnutí

  • MIME Type — standardizovaný identifikátor formátu dat (typ/podtyp), používaný v HTTP a iOS
  • UTType — iOS API pro práci s typy obsahu, podporující hierarchii a konverzi MIME→UTI
  • Určení typu se provádí podle přípony, magic bytes nebo HTTP hlavičky Content-Type
  • Vlastní typy se registrují v Info.plist přes UTExportedTypeDeclarations
  • Bezpečnost vyžaduje kontrolu obsahu — MIME z hlavičky může být zfalšován
  • Hierarchie UTI umožňuje kontrolovat kategorii souboru (obrázek, text, video) přes conforms(to:)
  • Application/octet-stream — univerzální typ pro neznámá binární data, vyžaduje heuristickou analýzu

Vyvineme mobilní aplikaci na klíč

IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.

Prodiskutovat projekt

Přečtěte si také