MIME Type — шта је то, типови датотека и одређивање у iOS

Аутор: IT Sectr Објављено: 2026-07-11 Време читања: 7 мин

MIME Type — стандардизовани идентификатор формата података који се користи у iOS-у за одређивање типа датотеке приликом преноса преко мреже, система датотека и међупроцесне комуникације. Према Apple Developer Documentation, 2024, MIME Type (Multipurpose Internet Mail Extensions) класификује датотеке према њиховом садржају: image/jpeg, application/pdf, text/plain. iOS конвертује MIME у UTI (Uniform Type Identifier) путем UTType-а за системску обраду датотека.

Главне тачке

  • MIME Type — идентификатор формата података од два дела: тип/подтип (image/png)
  • UTType — iOS-ов аналог MIME-а који се користи унутар система за идентификацију типова датотека
  • Конверзија између MIME-а и UTI-ја се врши путем UTType.preferredMIMEType
  • Одређивање MIME-а могуће по екстензији датотеке, садржају (magic bytes) или HTTP заглављу
  • iOS Sandbox ограничава приступ датотекама непознатих типова — важно је исправно регистровати прилагођене типове

Шта је MIME Type?

MIME Type (Multipurpose Internet Mail Extensions) — стандардизовани идентификатор формата података који се састоји од два дела: главног типа (type) и подтипа (subtype), раздвојених косом цртом. Главне категорије: text (текст), image (слике), audio (аудио), video (видео), application (бинарни подаци), multipart (сложене поруке).

MIME стандард је првобитно развијен за имејл прилоге (RFC 2046, 1996), али се данас користи свуда: HTTP сервери указују Content-Type одговора, прегледачи одређују како да обраде датотеке, а мобилне апликације — који подаци могу да се отворе. IANA (Internet Assigned Numbers Authority) води регистар регистрованих MIME типова.

Према IANA Media Types Registry (2024), регистровано је преко 1800 званичних MIME типова, а стварни број са прилагођеним и вендорским типовима прелази 5000. iOS подржава већину стандардних типова и пружа API за рад са њима путем Uniform Type Identifiers.

MIME и UTI у iOS-у: разлике и конверзија

UTI (Uniform Type Identifier) — Apple-ов сопствени систем идентификације типова садржаја који се користи унутар iOS-а и macOS-а. За разлику од MIME-а, UTI подржава хијерархију наслеђивања (нпр. public.image — родитељ за public.png и public.jpeg) и укључује не само формате датотека, већ и апстрактне типове података.

MIME TypeUTIЕкстензијаОпис
image/jpegpublic.jpeg.jpg, .jpegJPEG слика
application/pdfcom.adobe.pdf.pdfPDF документ
text/plainpublic.plain-text.txtТекстуална датотека
application/jsonpublic.json.jsonJSON подаци
video/mp4public.mpeg-4.mp4MP4 видео

Конверзија између MIME-а и UTI-ја у iOS-у се врши путем класе UTType (iOS 14+). Систем води интерну базу поклапања која покрива већину стандардних формата. За прилагођене типове, програмер региструје поклапање у 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 ?? "")")
}

// Обрнута конверзија: UTI у MIME
if let uti = UTType(filenameExtension: "pdf"),
   let mime = uti.preferredMIMEType {
    print("MIME for PDF: \(mime)")
}

UTI хијерархија омогућава проверу да ли тип одговара одређеној категорији. На пример, сви типови слика (JPEG, PNG, GIF) conforms(to: .image). Ово је згодно за групно филтрирање и одређивање могућности обраде типа од стране системских компоненти.

Важна разлика: MIME — равна класификација (без наслеђивања), док UTI подржава вишеструко наслеђивање. На пример, public.html одговара и public.source-code и public.text. Ово пружа флексибилније усмеравање при обради датотека у iOS-у.

Како одредити MIME Type датотеке у iOS-у

Три методе одређивања MIME Type-а су доступне у iOS-у: по екстензији датотеке (брзо, али непоуздано), по садржају путем magic bytes (поуздано, али захтева читање датотеке) и по HTTP заглављу Content-Type (само за мрежне захтеве).

swift
import UniformTypeIdentifiers

enum MIMEDetector {
    // Откриј по екстензији
    static func fromExtension(_ ext: String) -> String? {
        UTType(filenameExtension: ext)?.preferredMIMEType
    }

    // Откриј по садржају (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
    }
}

Одређивање по екстензији путем UTType-а — најбржа метода, али је непоуздана ако екстензија недостаје или је фалсификована. Нападач може преименовати .exe у .jpg — систем ће одредити image/jpeg, иако је датотека извршна. За критичне сценарије (безбедност, медицински подаци) обавезно користите проверу по садржају.

Magic bytes — први бајтови датотеке, јединствени за сваки формат. Већина формата има потпис од 2–12 бајтова. iOS не пружа уграђени детектор MIME-а по садржају — програмер или самостално имплементира табелу потписа или користи библиотеке попут CocoaLumberjack или прилагођени детектор заснован на евристикама.

Регистрација прилагођених MIME и UTI типова

Прилагођени типови су неопходни када апликација ради са власничким форматима података који нису регистровани у IANA-и или Apple-у. Регистрација у Info.plist-у омогућава iOS-у да исправно обрађује такве датотеке: отвара их из Files.app-а, приказује иконе и прослеђује их другим апликацијама путем 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>

За регистрацију прилагођеног типа потребно је навести у Info.plist-у: UTI идентификатор (у reverse-DNS формату), поклапање са родитељским типовима, екстензију датотеке и MIME тип. iOS користи ове информације за усмеравање датотека: када корисник отвори .sdoc датотеку, систем зна да је њен власник ваша апликација.

UTExportedTypeDeclarations — за типове које дефинише ваша апликација (извоз). UTImportedTypeDeclarations — за типове које су створиле друге апликације, а са којима ваша апликација може да ради (увоз). Apple препоручује регистровање свих прилагођених типова са којима апликација ради ради исправне интеграције са системом.

Безбедност и обрада непознатих типова

Непознати MIME типови представљају ризик за безбедност iOS апликације. Ако датотека има непознат или непроверен тип, апликација треба да предузме мере предострожности: не отвара датотеку аутоматски, прикаже упозорење кориснику или анализира садржај пре обраде.

Главне претње: датотека са лажним MIME типом може да садржи злонамерни код или експлоит за рањивост рашчлањивача. iOS штити систем путем Sandbox-а, али апликација може бити рањива ако верује MIME типу без провере садржаја. Увек проверавајте датотеку по magic bytes-има ако је добијена из неповерљивог извора.

Према OWASP Mobile Security Guide, 2024, за обраду датотека непознатих типова примењују се следеће праксе: одбијајте датотеке са MIME типом application/octet-stream из непроверених извора; користите UTType за проверу поклапања са очекиваним категоријама; не отварајте датотеке у спољним апликацијама без потврде корисника; евидентирајте све случајеве неусаглашености MIME-а и стварног садржаја за безбедносну ревизију.

Регистрација прилагођених MIME типова у Info.plist-у — то није само функционалност, већ и безбедност. Ако апликација исправно региструје само своје типове, систем неће грешком прослеђивати туђе датотеке њој. Користите специфичне вендорске префиксе (application/vnd.company.app-format) уместо општих (application/x-format) да бисте избегли конфликте са другим апликацијама.

Често постављана питања

Шта је MIME Type?

MIME Type — стандардни идентификатор формата података који се састоји од типа и подтипа (на пример, image/jpeg). Користе га HTTP сервери, прегледачи и апликације за одређивање начина обраде датотеке.

По чему се UTI разликује од MIME-а у iOS-у?

UTI (Uniform Type Identifier) — Apple-ов систем за идентификацију типова садржаја са подршком за хијерархију наслеђивања. MIME — равни стандард за мрежу. iOS користи UTType за конверзију између UTI-ја и MIME-а путем својства preferredMIMEType.

Како одредити MIME Type датотеке у iOS-у?

Три начина: по екстензији путем UTType(filenameExtension:), по садржају путем magic bytes (први бајтови датотеке), по HTTP заглављу Content-Type. Ради безбедности користите проверу по садржају, а не само по екстензији.

Како регистровати прилагођени MIME тип у iOS-у?

Додајте UTExportedTypeDeclarations у Info.plist: наведите UTI идентификатор (com.company.format), екстензију датотеке, MIME тип и родитељски тип. Датотеке са овом екстензијом ће се аутоматски повезивати са вашом апликацијом.

Шта радити са непознатим MIME типовима?

Не верујте непознатом MIME-у. Проверите садржај по magic bytes-има, прикажите упозорење кориснику и не отварајте датотеку аутоматски. За датотеке типа application/octet-stream увек извршите евристичку анализу пре обраде.

Резиме

  • MIME Type — стандардизовани идентификатор формата података (тип/подтип), који се користи у HTTP-у и iOS-у
  • UTType — iOS API за рад са типовима садржаја, који подржава хијерархију и конверзију MIME→UTI
  • Одређивање типа се врши по екстензији, magic bytes-има или HTTP заглављу Content-Type
  • Прилагођени типови се региструју у Info.plist-у путем UTExportedTypeDeclarations
  • Безбедност захтева проверу садржаја — MIME из заглавља може бити фалсификован
  • UTI хијерархија омогућава проверу категорије датотеке (слика, текст, видео) путем conforms(to:)
  • Application/octet-stream — универзални тип за непознате бинарне податке, захтева евристичку анализу

Развићемо мобилну апликацију под кључ

IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.

Разговарајте о пројекту

Прочитајте такође