MIME Türü — nedir, dosya türleri ve iOS'ta belirleme

Yazar: IT Sectr Yayınlanma: 2026-07-11 Okuma süresi: 7 dk

MIME Türü, iOS'ta ağ, dosya sistemi ve süreçler arası iletişim yoluyla iletim yapılırken dosya türünü belirlemek için kullanılan standartlaştırılmış bir veri biçimi tanımlayıcısıdır. Apple Geliştirici Dokümantasyonu, 2024'ye göre, MIME Türü (Multipurpose Internet Mail Extensions) dosyaları içeriklerine göre sınıflandırır: image/jpeg, application/pdf, text/plain. iOS, sistem dosya işleme için UTType aracılığıyla MIME'ı UTI'ye (Tek Tip Tanımlayıcı) dönüştürür.

Önemli Noktalar

  • MIME Türü — iki parçalı veri biçimi tanımlayıcısı: tür/alt tür (image/png)
  • UTType — MIME'ın iOS karşılığı, dahili olarak dosya türlerini tanımlamak için kullanılır
  • Dönüştürme MIME ve UTI arasında UTType.preferredMIMEType aracılığıyla yapılır
  • MIME belirleme dosya uzantısı, içerik (sihirli baytlar) veya HTTP başlığı ile mümkündür
  • iOS Sandbox bilinmeyen türdeki dosyalara erişimi kısıtlar — özel türleri doğru şekilde kaydetmek önemlidir

MIME Türü Nedir?

MIME Türü (Multipurpose Internet Mail Extensions), bir ana tür (type) ve bir alt türden (subtype) oluşan, eğik çizgiyle ayrılan standartlaştırılmış bir veri biçimi tanımlayıcısıdır. Ana kategoriler: text (metin), image (görseller), audio (ses), video, application (ikili veri), multipart (bileşik mesajlar).

MIME standardı başlangıçta e-posta ekleri için geliştirilmiştir (RFC 2046, 1996), ancak bugün her yerde kullanılmaktadır: HTTP sunucuları yanıtların Content-Type'ını belirtir, tarayıcılar dosyaların nasıl işleneceğini belirler ve mobil uygulamalar hangi verilerin açılabileceğini tanımlar. IANA (Internet Assigned Numbers Authority), kayıtlı MIME türlerinin bir kaydını tutar.

IANA Medya Türleri Kaydı (2024)'na göre, 1.800'den fazla resmi MIME türü kayıtlıdır ve özel ve satıcı türleri dahil gerçek sayı 5.000'i aşmaktadır. iOS çoğu standart türü destekler ve Tek Tip Tanımlayıcılar aracılığıyla bunlarla çalışmak için API'ler sağlar.

iOS'ta MIME ve UTI: Farklar ve Dönüştürme

UTI (Tek Tip Tanımlayıcı), iOS ve macOS içinde kullanılan Apple'ın kendi içerik türü tanımlama sistemidir. MIME'ın aksine, UTI bir kalıtım hiyerarşisini destekler (örneğin, public.image, public.png ve public.jpeg'in ebeveynidir) ve yalnızca dosya biçimlerini değil, aynı zamanda soyut veri türlerini de içerir.

MIME TürüUTIUzantıAçıklama
image/jpegpublic.jpeg.jpg, .jpegJPEG görüntüsü
application/pdfcom.adobe.pdf.pdfPDF belgesi
text/plainpublic.plain-text.txtMetin dosyası
application/jsonpublic.json.jsonJSON verisi
video/mp4public.mpeg-4.mp4MP4 videosu

Dönüştürme iOS'ta MIME ve UTI arasında UTType sınıfı (iOS 14+) aracılığıyla gerçekleştirilir. Sistem, çoğu standart biçimi kapsayan dahili bir eşleme veritabanı tutar. Özel türler için geliştirici, eşlemeyi Info.plist'te kaydeder.

swift
import UniformTypeIdentifiers

let mimeType = "image/jpeg"
if let uti = UTType(mimeType: mimeType) {
    print("UTI: \(uti.identifier)")
    print("Görüntüye uygun: \(uti.conforms(to: .image))")
    print("Uzantı: \(uti.preferredFilenameExtension ?? "")")
}

// Ters dönüştürme: UTI'den MIME'a
if let uti = UTType(filenameExtension: "pdf"),
   let mime = uti.preferredMIMEType {
    print("PDF için MIME: \(mime)")
}

UTI hiyerarşisi, bir türün belirli bir kategoriye uygun olup olmadığını kontrol etmeye olanak tanır. Örneğin, tüm görüntü türleri (JPEG, PNG, GIF) conform(to: .image) yapar. Bu, grup filtreleme ve bir türün sistem bileşenleri tarafından işlenip işlenemeyeceğini belirleme için kullanışlıdır.

Önemli fark: MIME düz bir sınıflandırmadır (kalıtım yok), oysa UTI çoklu kalıtımı destekler. Örneğin, public.html hem public.source-code hem de public.text ile uyumludur. Bu, iOS'ta dosyaları işlerken daha esnek yönlendirme sağlar.

iOS'ta Bir Dosyanın MIME Türü Nasıl Belirlenir

Üç yöntem iOS'ta MIME Türünü belirlemek için mevcuttur: dosya uzantısıyla (hızlı ancak güvenilmez), sihirli baytlar aracılığıyla içerikle (güvenilir ancak dosya okumayı gerektirir) ve HTTP Content-Type başlığıyla (yalnızca ağ istekleri için).

swift
import UniformTypeIdentifiers

enum MIMEDetector {
    // Uzantıyla algıla
    static func fromExtension(_ ext: String) -> String? {
        UTType(filenameExtension: ext)?.preferredMIMEType
    }

    // İçerikle algıla (sihirli baytlar)
    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
    }
}

Uzantı tabanlı belirleme UTType aracılığıyla en hızlı yöntemdir, ancak uzantı eksik veya sahte ise güvenilmezdir. Bir saldırgan .exe dosyasını .jpg olarak yeniden adlandırabilir — sistem, dosya yürütülebilir olsa bile onu image/jpeg olarak tanımlar. Kritik senaryolar (güvenlik, tıbbi veri) için her zaman içerik tabanlı doğrulama kullanın.

Sihirli baytlar, her biçim için benzersiz olan dosyanın ilk baytlarıdır. Çoğu biçimin 2–12 baytlık bir imzası vardır. iOS, içeriğe göre yerleşik bir MIME dedektörü sağlamaz — geliştirici ya kendi imza tablosunu uygular ya da CocoaLumberjack gibi kütüphaneleri veya sezgisel tabanlı özel bir dedektör kullanır.

Özel MIME ve UTI Türlerini Kaydetme

Özel türler, bir uygulamanın IANA veya Apple'a kayıtlı olmayan tescilli veri biçimleriyle çalışması gerektiğinde gereklidir. Info.plist'te kayıt, iOS'un bu tür dosyaları doğru şekilde işlemesine olanak tanır: bunları Files.app'ten açmak, simgeleri görüntülemek ve UIActivityViewController aracılığıyla diğer uygulamalara iletmek.

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>

Özel bir türü kaydetmek için Info.plist'te şunları belirtmeniz gerekir: UTI tanımlayıcısı (reverse-DNS biçiminde), ebeveyn türlere uygunluk, dosya uzantısı ve MIME türü. iOS, dosya yönlendirme için bu bilgileri kullanır: bir kullanıcı .sdoc dosyasını açtığında, sistem sahibinin sizin uygulamanız olduğunu bilir.

UTExportedTypeDeclarations — uygulamanız tarafından tanımlanan türler için (dışa aktarma). UTImportedTypeDeclarations — diğer uygulamalar tarafından oluşturulan ancak uygulamanızın çalışabileceği türler için (içe aktarma). Apple, doğru sistem entegrasyonu için uygulamanızın çalıştığı tüm özel türleri kaydetmenizi önerir.

Güvenlik ve Bilinmeyen Türlerin İşlenmesi

Bilinmeyen MIME türleri iOS uygulamaları için güvenlik riski oluşturur. Bir dosyanın bilinmeyen veya doğrulanmamış bir türü varsa, uygulama önlem almalıdır: dosyayı otomatik olarak açmamalı, kullanıcıya bir uyarı göstermeli veya işlemeden önce içeriği analiz etmelidir.

Başlıca tehditler: sahte MIME türüne sahip bir dosya, kötü amaçlı kod veya bir ayrıştırıcı güvenlik açığını hedef alan bir istismar içerebilir. iOS, Sandbox aracılığıyla sistemi korur, ancak uygulama, içeriği doğrulamadan MIME türüne güvenirse savunmasız kalabilir. Dosyalar güvenilmeyen bir kaynaktan geliyorsa her zaman sihirli baytlarla kontrol edin.

OWASP Mobil Güvenlik Kılavuzu, 2024'e göre, bilinmeyen türdeki dosyaları işlemek için aşağıdaki uygulamalar geçerlidir: güvenilmeyen kaynaklardan application/octet-stream MIME türüne sahip dosyaları reddedin; beklenen kategorilere uygunluğu kontrol etmek için UTType kullanın; kullanıcı onayı olmadan harici uygulamalarda dosyaları açmayın; güvenlik denetimi için MIME ve gerçek içerik uyumsuzluğunun tüm durumlarını günlüğe kaydedin.

Özel MIME türlerinin Info.plist'te kaydedilmesi yalnızca işlevsellik değil, aynı zamanda güvenliktir. Bir uygulama yalnızca kendi türlerini doğru şekilde kaydederse, sistem yanlışlıkla ona diğer dosyaları iletmez. Diğer uygulamalarla çakışmaları önlemek için genel ön ekler (application/x-format) yerine belirli satıcı ön eklerini (application/vnd.company.app-format) kullanın.

Sıkça Sorulan Sorular

MIME Türü nedir?

MIME Türü, bir tür ve alt türden (örneğin, image/jpeg) oluşan standart bir veri biçimi tanımlayıcısıdır. HTTP sunucuları, tarayıcılar ve uygulamalar tarafından bir dosyanın nasıl işleneceğini belirlemek için kullanılır.

iOS'ta UTI, MIME'dan nasıl farklıdır?

UTI (Tek Tip Tanımlayıcı), kalıtım hiyerarşisi desteğiyle içerik türlerini tanımlamak için Apple'ın sistemidir. MIME, ağ için düz bir standarttır. iOS, preferredMIMEType özelliği aracılığıyla UTI ve MIME arasında dönüştürme için UTType kullanır.

iOS'ta bir dosyanın MIME türü nasıl belirlenir?

Üç yol: uzantıyla UTType(filenameExtension:) aracılığıyla, içerikle sihirli baytlar aracılığıyla (dosyanın ilk baytları), HTTP başlığıyla Content-Type. Güvenlik için, yalnızca uzantı yerine içerik tabanlı doğrulama kullanın.

iOS'ta özel bir MIME türü nasıl kaydedilir?

Info.plist'e UTExportedTypeDeclarations ekleyin: UTI tanımlayıcısını (com.company.format), dosya uzantısını, MIME türünü ve ebeveyn türü belirtin. Bu uzantıya sahip dosyalar otomatik olarak uygulamanızla ilişkilendirilecektir.

Bilinmeyen MIME türleriyle ne yapmalı?

Bilinmeyen bir MIME'a güvenmeyin. Sihirli baytlarla içeriği kontrol edin, kullanıcıya bir uyarı gösterin ve dosyayı otomatik olarak açmayın. application/octet-stream türündeki dosyalar için, işlemeden önce her zaman sezgisel analiz yapın.

Özet

  • MIME Türü — HTTP ve iOS'ta kullanılan standartlaştırılmış veri biçimi tanımlayıcısı (tür/alt tür)
  • UTType — içerik türleriyle çalışmak için iOS API'si, hiyerarşi ve MIME→UTI dönüşümünü destekler
  • Tür belirleme uzantı, sihirli baytlar veya HTTP Content-Type başlığı ile yapılır
  • Özel türler UTExportedTypeDeclarations aracılığıyla Info.plist'te kaydedilir
  • Güvenlik içerik doğrulaması gerektirir — başlıktaki MIME sahte olabilir
  • UTI hiyerarşisi conforms(to:) aracılığıyla dosya kategorisini (görüntü, metin, video) kontrol etmeye olanak tanır
  • Application/octet-stream — bilinmeyen ikili veriler için evrensel tür, sezgisel analiz gerektirir

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış

Ayrıca okuyun