MIME Type — apa itu, jenis file dan penentuan di iOS

Penulis: IT Sectr Diterbitkan: 2026-07-11 Waktu membaca: 7 mnt

MIME Type — adalah pengidentifikasi standar format data yang digunakan di iOS untuk menentukan jenis file saat transmisi melalui jaringan, sistem file, dan komunikasi antarproses. Menurut Apple Developer Documentation, 2024, MIME Type (Multipurpose Internet Mail Extensions) mengklasifikasikan file berdasarkan kontennya: image/jpeg, application/pdf, text/plain. iOS mengonversi MIME ke UTI (Uniform Type Identifier) melalui UTType untuk pemrosesan file secara sistem.

Poin Penting

  • MIME Type — pengidentifikasi format data dari dua bagian: jenis/subjenis (image/png)
  • UTType — analog iOS dari MIME, digunakan di dalam sistem untuk identifikasi jenis file
  • Konversi antara MIME dan UTI dilakukan melalui UTType.preferredMIMEType
  • Penentuan MIME dimungkinkan melalui ekstensi file, konten (magic bytes) atau header HTTP
  • iOS Sandbox membatasi akses ke file jenis tidak dikenal — penting untuk mendaftarkan jenis kustom dengan benar

Apa itu MIME Type?

MIME Type (Multipurpose Internet Mail Extensions) — adalah pengidentifikasi standar format data yang terdiri dari dua bagian: jenis utama (type) dan subjenis (subtype), dipisahkan oleh garis miring. Kategori utama: text (teks), image (gambar), audio (audio), video (video), application (data biner), multipart (pesan gabungan).

Standar MIME awalnya dikembangkan untuk lampiran email (RFC 2046, 1996), tetapi hari ini digunakan di mana-mana: server HTTP menunjukkan Content-Type respons, browser menentukan cara memproses file, dan aplikasi seluler — data apa yang dapat dibuka. IANA (Internet Assigned Numbers Authority) memelihara registri jenis MIME yang terdaftar.

Menurut IANA Media Types Registry (2024), lebih dari 1800 jenis MIME resmi terdaftar, dan jumlah sebenarnya termasuk jenis kustom dan vendor melebihi 5000. iOS mendukung sebagian besar jenis standar dan menyediakan API untuk bekerja dengannya melalui Uniform Type Identifiers.

MIME dan UTI di iOS: perbedaan dan konversi

UTI (Uniform Type Identifier) — adalah sistem identifikasi jenis konten milik Apple, digunakan di dalam iOS dan macOS. Berbeda dengan MIME, UTI mendukung hierarki pewarisan (misalnya, public.image — induk untuk public.png dan public.jpeg) dan mencakup tidak hanya format file, tetapi juga jenis data abstrak.

MIME TypeUTIEkstensiDeskripsi
image/jpegpublic.jpeg.jpg, .jpegGambar JPEG
application/pdfcom.adobe.pdf.pdfDokumen PDF
text/plainpublic.plain-text.txtFile teks
application/jsonpublic.json.jsonData JSON
video/mp4public.mpeg-4.mp4Video MP4

Konversi antara MIME dan UTI di iOS dilakukan melalui kelas UTType (iOS 14+). Sistem memelihara basis data internal kecocokan yang mencakup sebagian besar format standar. Untuk jenis kustom, pengembang mendaftarkan kecocokan di 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 ?? "")")
}

// Konversi terbalik: UTI ke MIME
if let uti = UTType(filenameExtension: "pdf"),
   let mime = uti.preferredMIMEType {
    print("MIME for PDF: \(mime)")
}

Hierarki UTI memungkinkan pemeriksaan apakah suatu jenis sesuai dengan kategori tertentu. Misalnya, semua jenis gambar (JPEG, PNG, GIF) conforms(to: .image). Ini berguna untuk pemfilteran grup dan penentuan kemampuan pemrosesan jenis oleh komponen sistem.

Perbedaan penting: MIME — adalah klasifikasi datar (tanpa pewarisan), sedangkan UTI mendukung pewarisan ganda. Misalnya, public.html sesuai dengan public.source-code dan public.text. Ini memberikan perutean yang lebih fleksibel saat memproses file di iOS.

Cara menentukan MIME Type file di iOS

Tiga metode penentuan MIME Type tersedia di iOS: melalui ekstensi file (cepat, tetapi tidak dapat diandalkan), melalui konten dengan magic bytes (dapat diandalkan, tetapi memerlukan pembacaan file) dan melalui header HTTP Content-Type (hanya untuk permintaan jaringan).

swift
import UniformTypeIdentifiers

enum MIMEDetector {
    // Deteksi melalui ekstensi
    static func fromExtension(_ ext: String) -> String? {
        UTType(filenameExtension: ext)?.preferredMIMEType
    }

    // Deteksi melalui konten (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
    }
}

Penentuan melalui ekstensi melalui UTType — metode tercepat, tetapi tidak dapat diandalkan jika ekstensi tidak ada atau dipalsukan. Penyerang dapat mengganti nama .exe menjadi .jpg — sistem akan menentukan image/jpeg, meskipun file tersebut adalah file yang dapat dieksekusi. Untuk skenario kritis (keamanan, data medis) wajib menggunakan pemeriksaan berdasarkan konten.

Magic bytes — adalah byte pertama file, unik untuk setiap format. Sebagian besar format memiliki tanda tangan 2–12 byte. iOS tidak menyediakan detektor MIME bawaan berdasarkan konten — pengembang baik mengimplementasikan tabel tanda tangan sendiri, atau menggunakan pustaka seperti CocoaLumberjack atau detektor kustom berbasis heuristik.

Pendaftaran jenis MIME dan UTI kustom

Jenis kustom diperlukan ketika aplikasi bekerja dengan format data kepemilikan yang tidak terdaftar di IANA atau Apple. Pendaftaran di Info.plist memungkinkan iOS memproses file tersebut dengan benar: membukanya dari Files.app, menampilkan ikon, dan meneruskannya ke aplikasi lain melalui 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>

Untuk mendaftarkan jenis kustom, Anda perlu menyebutkan di Info.plist: pengidentifikasi UTI (dalam format reverse-DNS), kecocokan dengan jenis induk, ekstensi file, dan jenis MIME. iOS menggunakan informasi ini untuk perutean file: ketika pengguna membuka file .sdoc, sistem tahu bahwa pemiliknya adalah aplikasi Anda.

UTExportedTypeDeclarations — untuk jenis yang ditentukan oleh aplikasi Anda (ekspor). UTImportedTypeDeclarations — untuk jenis yang dibuat oleh aplikasi lain yang dapat digunakan oleh aplikasi Anda (impor). Apple merekomendasikan mendaftarkan semua jenis kustom yang digunakan aplikasi untuk integrasi yang benar dengan sistem.

Keamanan dan pemrosesan jenis tidak dikenal

Jenis MIME tidak dikenal menimbulkan risiko keamanan bagi aplikasi iOS. Jika file memiliki jenis tidak dikenal atau belum diverifikasi, aplikasi harus mengambil tindakan pencegahan: tidak membuka file secara otomatis, menampilkan peringatan kepada pengguna, atau menganalisis konten sebelum diproses.

Ancaman utama: file dengan jenis MIME palsu dapat berisi kode berbahaya atau eksploit untuk kerentanan parser. iOS melindungi sistem melalui Sandbox, tetapi aplikasi dapat rentan jika mempercayai jenis MIME tanpa verifikasi konten. Selalu periksa file melalui magic bytes jika berasal dari sumber yang tidak tepercaya.

Menurut OWASP Mobile Security Guide, 2024, praktik berikut diterapkan untuk memproses file jenis tidak dikenal: tolak file dengan jenis MIME application/octet-stream dari sumber yang tidak terverifikasi; gunakan UTType untuk memeriksa kecocokan dengan kategori yang diharapkan; jangan buka file di aplikasi eksternal tanpa konfirmasi pengguna; catat semua kasus ketidaksesuaian antara MIME dan konten sebenarnya untuk audit keamanan.

Pendaftaran jenis MIME kustom di Info.plist — bukan hanya fungsionalitas, tetapi juga keamanan. Jika aplikasi hanya mendaftarkan jenisnya sendiri dengan benar, sistem tidak akan secara keliru mengirimkan file asing kepadanya. Gunakan prefiks vendor spesifik (application/vnd.company.app-format) daripada yang umum (application/x-format) untuk menghindari konflik dengan aplikasi lain.

Pertanyaan yang Sering Diajukan

Apa itu MIME Type?

MIME Type — adalah pengidentifikasi standar format data yang terdiri dari jenis dan subjenis (misalnya, image/jpeg). Ini digunakan oleh server HTTP, browser, dan aplikasi untuk menentukan cara memproses file.

Apa perbedaan UTI dari MIME di iOS?

UTI (Uniform Type Identifier) — sistem Apple untuk identifikasi jenis konten dengan dukungan hierarki pewarisan. MIME — standar datar untuk jaringan. iOS menggunakan UTType untuk konversi antara UTI dan MIME melalui properti preferredMIMEType.

Bagaimana cara menentukan MIME Type file di iOS?

Tiga cara: melalui ekstensi melalui UTType(filenameExtension:), melalui konten dengan magic bytes (byte pertama file), melalui header HTTP Content-Type. Untuk keamanan, gunakan pemeriksaan konten, bukan hanya ekstensi.

Bagaimana cara mendaftarkan jenis MIME kustom di iOS?

Tambahkan UTExportedTypeDeclarations di Info.plist: sebutkan pengidentifikasi UTI (com.company.format), ekstensi file, jenis MIME, dan jenis induk. File dengan ekstensi ini akan secara otomatis dikaitkan dengan aplikasi Anda.

Apa yang harus dilakukan dengan jenis MIME tidak dikenal?

Jangan percaya pada MIME yang tidak dikenal. Periksa konten melalui magic bytes, tampilkan peringatan kepada pengguna, dan jangan buka file secara otomatis. Untuk file jenis application/octet-stream, selalu lakukan analisis heuristik sebelum diproses.

Kesimpulan

  • MIME Type — pengidentifikasi standar format data (jenis/subjenis), digunakan di HTTP dan iOS
  • UTType — API iOS untuk bekerja dengan jenis konten, mendukung hierarki dan konversi MIME→UTI
  • Penentuan jenis dilakukan melalui ekstensi, magic bytes, atau header HTTP Content-Type
  • Jenis kustom didaftarkan di Info.plist melalui UTExportedTypeDeclarations
  • Keamanan memerlukan verifikasi konten — MIME dari header dapat dipalsukan
  • Hierarki UTI memungkinkan pemeriksaan kategori file (gambar, teks, video) melalui conforms(to:)
  • Application/octet-stream — jenis universal untuk data biner tidak dikenal, memerlukan analisis heuristik

Kami akan mengembangkan aplikasi seluler turnkey

IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.

Diskusikan proyek

Baca juga