MIME प्रकार एक मानकीकृत डेटा प्रारूप पहचानकर्ता है जिसका उपयोग iOS में नेटवर्क, फ़ाइल सिस्टम और अंतर-प्रक्रिया संचार के माध्यम से संचारित करते समय फ़ाइल प्रकार निर्धारित करने के लिए किया जाता है। Apple डेवलपर दस्तावेज़ीकरण, 2024 के अनुसार, MIME प्रकार (Multipurpose Internet Mail Extensions) फ़ाइलों को उनकी सामग्री के आधार पर वर्गीकृत करता है: image/jpeg, application/pdf, text/plain। iOS सिस्टम फ़ाइल हैंडलिंग के लिए UTType के माध्यम से MIME को UTI (यूनिफ़ॉर्म टाइप आइडेंटिफ़ायर) में परिवर्तित करता है।
मुख्य बिंदु
MIME प्रकार (Multipurpose Internet Mail Extensions) एक मानकीकृत डेटा प्रारूप पहचानकर्ता है जो दो भागों से बना होता है: एक मुख्य प्रकार (type) और एक उपप्रकार (subtype), जो स्लैश से अलग होते हैं। मुख्य श्रेणियाँ: text (पाठ), image (चित्र), audio (ऑडियो), video (वीडियो), application (बाइनरी डेटा), multipart (समग्र संदेश)।
MIME मानक मूल रूप से ईमेल अटैचमेंट (RFC 2046, 1996) के लिए विकसित किया गया था, लेकिन आज इसका उपयोग हर जगह किया जाता है: HTTP सर्वर प्रतिक्रियाओं का Content-Type निर्दिष्ट करते हैं, ब्राउज़र यह निर्धारित करते हैं कि फ़ाइलों को कैसे संभालना है, और मोबाइल एप्लिकेशन पहचानते हैं कि कौन सा डेटा खोला जा सकता है। IANA (इंटरनेट असाइन्ड नंबर्स अथॉरिटी) पंजीकृत MIME प्रकारों का एक रजिस्ट्री रखता है।
IANA मीडिया प्रकार रजिस्ट्री (2024) के अनुसार, 1800 से अधिक आधिकारिक MIME प्रकार पंजीकृत हैं, और कस्टम और विक्रेता प्रकारों सहित वास्तविक संख्या 5000 से अधिक है। iOS अधिकांश मानक प्रकारों का समर्थन करता है और यूनिफ़ॉर्म टाइप आइडेंटिफ़ायर के माध्यम से उनके साथ काम करने के लिए API प्रदान करता है।
UTI (यूनिफ़ॉर्म टाइप आइडेंटिफ़ायर) iOS और macOS के अंदर उपयोग की जाने वाली सामग्री प्रकार पहचान की Apple की अपनी प्रणाली है। MIME के विपरीत, UTI एक वंशानुक्रम पदानुक्रम का समर्थन करता है (उदाहरण के लिए, public.image, public.png और public.jpeg का जनक है) और इसमें न केवल फ़ाइल प्रारूप बल्कि अमूर्त डेटा प्रकार भी शामिल हैं।
| MIME प्रकार | UTI | एक्सटेंशन | विवरण |
|---|---|---|---|
| image/jpeg | public.jpeg | .jpg, .jpeg | JPEG छवि |
| application/pdf | com.adobe.pdf | PDF दस्तावेज़ | |
| text/plain | public.plain-text | .txt | पाठ फ़ाइल |
| application/json | public.json | .json | JSON डेटा |
| video/mp4 | public.mpeg-4 | .mp4 | MP4 वीडियो |
रूपांतरण iOS में MIME और UTI के बीच UTType वर्ग (iOS 14+) के माध्यम से किया जाता है। सिस्टम एक आंतरिक मैपिंग डेटाबेस बनाए रखता है जो अधिकांश मानक प्रारूपों को कवर करता है। कस्टम प्रकारों के लिए, डेवलपर Info.plist में मैपिंग पंजीकृत करता है।
import UniformTypeIdentifiers
let mimeType = "image/jpeg"
if let uti = UTType(mimeType: mimeType) {
print("UTI: \(uti.identifier)")
print("छवि के अनुरूप: \(uti.conforms(to: .image))")
print("एक्सटेंशन: \(uti.preferredFilenameExtension ?? "")")
}
// उल्टा रूपांतरण: UTI से MIME
if let uti = UTType(filenameExtension: "pdf"),
let mime = uti.preferredMIMEType {
print("PDF के लिए MIME: \(mime)")
}
UTI पदानुक्रम यह जांचने की अनुमति देता है कि कोई प्रकार किसी निश्चित श्रेणी के अनुरूप है या नहीं। उदाहरण के लिए, सभी छवि प्रकार (JPEG, PNG, GIF) conform(to: .image) करते हैं। यह समूह फ़िल्टरिंग और यह निर्धारित करने के लिए सुविधाजनक है कि कोई प्रकार सिस्टम घटकों द्वारा संभाला जा सकता है या नहीं।
महत्वपूर्ण अंतर: MIME एक सपाट वर्गीकरण है (कोई वंशानुक्रम नहीं), जबकि UTI एकाधिक वंशानुक्रम का समर्थन करता है। उदाहरण के लिए, public.html public.source-code और public.text दोनों के अनुरूप है। यह iOS में फ़ाइलों को संसाधित करते समय अधिक लचीला रूटिंग प्रदान करता है।
तीन विधियाँ iOS में MIME प्रकार निर्धारित करने के लिए उपलब्ध हैं: फ़ाइल एक्सटेंशन द्वारा (तेज़ लेकिन अविश्वसनीय), मैजिक बाइट्स के माध्यम से सामग्री द्वारा (विश्वसनीय लेकिन फ़ाइल पढ़ने की आवश्यकता है), और HTTP Content-Type हेडर द्वारा (केवल नेटवर्क अनुरोधों के लिए)।
import UniformTypeIdentifiers
enum MIMEDetector {
// एक्सटेंशन द्वारा पता लगाएं
static func fromExtension(_ ext: String) -> String? {
UTType(filenameExtension: ext)?.preferredMIMEType
}
// सामग्री द्वारा पता लगाएं (मैजिक बाइट्स)
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 के रूप में पहचानेगा भले ही फ़ाइल निष्पादन योग्य हो। महत्वपूर्ण परिदृश्यों (सुरक्षा, चिकित्सा डेटा) के लिए, हमेशा सामग्री-आधारित सत्यापन का उपयोग करें।
मैजिक बाइट्स फ़ाइल के पहले बाइट होते हैं, प्रत्येक प्रारूप के लिए अद्वितीय। अधिकांश प्रारूपों में 2–12 बाइट का हस्ताक्षर होता है। iOS सामग्री द्वारा कोई अंतर्निहित MIME डिटेक्टर प्रदान नहीं करता है — डेवलपर या तो स्वयं एक हस्ताक्षर तालिका लागू करता है या CocoaLumberjack जैसी लाइब्रेरी या ह्यूरिस्टिक-आधारित कस्टम डिटेक्टर का उपयोग करता है।
कस्टम प्रकार आवश्यक हैं जब कोई एप्लिकेशन स्वामित्व डेटा प्रारूपों के साथ काम करता है जो IANA या Apple में पंजीकृत नहीं हैं। Info.plist में पंजीकरण iOS को ऐसी फ़ाइलों को सही ढंग से संभालने की अनुमति देता है: उन्हें Files.app से खोलना, आइकन प्रदर्शित करना और UIActivityViewController के माध्यम से अन्य एप्लिकेशन को पास करना।
<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 सैंडबॉक्स के माध्यम से सिस्टम की रक्षा करता है, लेकिन एप्लिकेशन असुरक्षित हो सकता है यदि वह सामग्री को सत्यापित किए बिना MIME प्रकार पर भरोसा करता है। यदि फ़ाइलें अविश्वसनीय स्रोत से आती हैं तो हमेशा मैजिक बाइट्स द्वारा जांचें।
OWASP मोबाइल सुरक्षा गाइड, 2024 के अनुसार, अज्ञात प्रकारों की फ़ाइलों को संभालने के लिए निम्नलिखित प्रथाएँ लागू होती हैं: अविश्वसनीय स्रोतों से application/octet-stream MIME प्रकार वाली फ़ाइलों को अस्वीकार करें; अपेक्षित श्रेणियों के अनुरूपता की जांच करने के लिए UTType का उपयोग करें; उपयोगकर्ता की पुष्टि के बिना बाहरी एप्लिकेशन में फ़ाइलें न खोलें; सुरक्षा ऑडिटिंग के लिए MIME और वास्तविक सामग्री बेमेल के सभी मामलों को लॉग करें।
कस्टम MIME प्रकार का Info.plist में पंजीकरण न केवल कार्यक्षमता है बल्कि सुरक्षा भी है। यदि कोई एप्लिकेशन केवल अपने स्वयं के प्रकारों को सही ढंग से पंजीकृत करता है, तो सिस्टम गलती से उसे अन्य फ़ाइलें नहीं भेजेगा। अन्य एप्लिकेशन के साथ संघर्ष से बचने के लिए सामान्य उपसर्गों (application/x-format) के बजाय विशिष्ट विक्रेता उपसर्गों (application/vnd.company.app-format) का उपयोग करें।
अक्सर पूछे जाने वाले प्रश्न
MIME प्रकार एक मानक डेटा प्रारूप पहचानकर्ता है जिसमें एक प्रकार और उपप्रकार (जैसे, image/jpeg) शामिल है। इसका उपयोग HTTP सर्वर, ब्राउज़र और एप्लिकेशन द्वारा यह निर्धारित करने के लिए किया जाता है कि फ़ाइल को कैसे संभालना है।
UTI (यूनिफ़ॉर्म टाइप आइडेंटिफ़ायर) वंशानुक्रम पदानुक्रम के समर्थन के साथ सामग्री प्रकारों की पहचान करने के लिए Apple की प्रणाली है। MIME नेटवर्क के लिए एक सपाट मानक है। iOS preferredMIMEType प्रॉपर्टी के माध्यम से UTI और MIME के बीच रूपांतरण के लिए UTType का उपयोग करता है।
तीन तरीके: एक्सटेंशन द्वारा UTType(filenameExtension:) के माध्यम से, सामग्री द्वारा मैजिक बाइट्स के माध्यम से (फ़ाइल के पहले बाइट), HTTP हेडर द्वारा Content-Type। सुरक्षा के लिए, केवल एक्सटेंशन के बजाय सामग्री-आधारित सत्यापन का उपयोग करें।
Info.plist में UTExportedTypeDeclarations जोड़ें: UTI पहचानकर्ता (com.company.format), फ़ाइल एक्सटेंशन, MIME प्रकार और जनक प्रकार निर्दिष्ट करें। इस एक्सटेंशन वाली फ़ाइलें स्वचालित रूप से आपके एप्लिकेशन से जुड़ जाएंगी।
अज्ञात MIME पर भरोसा न करें। मैजिक बाइट्स द्वारा सामग्री की जांच करें, उपयोगकर्ता को चेतावनी दिखाएं और फ़ाइल को स्वचालित रूप से न खोलें। application/octet-stream प्रकार की फ़ाइलों के लिए, प्रसंस्करण से पहले हमेशा ह्यूरिस्टिक विश्लेषण करें।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें