बड़ा चेतावनी: सुनिश्चित करें कि आपका विस्तार पहले से ही कुछ माइम प्रकार से बंधा हुआ नहीं है।
हमने मूल रूप से, कभी भी, और सफारी के लिए अपनी कस्टम फ़ाइलों के लिए एक्सटेंशन '.icz' का उपयोग किया है और आपको कभी भी यह कहने की अनुमति नहीं देगा कि "सफारी इस फ़ाइल को नहीं खोल सकती।" कोई फर्क नहीं पड़ता कि हमने क्या किया या यूटी सामान के साथ ऊपर की कोशिश की।
आखिरकार मुझे एहसास हुआ कि कुछ यूटी * सी फ़ंक्शन हैं जिनका उपयोग आप विभिन्न चीजों का पता लगाने के लिए कर सकते हैं, और जबकि .icz सही उत्तर देता है (हमारा ऐप):
एप्लिकेशन में शीर्ष पर लोड किया गया, बस यह करें ...
NSString * UTI = (NSString *)UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension,
(CFStringRef)@"icz",
NULL);
CFURLRef ur =UTTypeCopyDeclaringBundleURL(UTI);
और उस लाइन के बाद ब्रेक लगाएं और देखें कि यूटीआई और उर क्या हैं - हमारे मामले में, यह हमारा पहचानकर्ता था जैसा हम चाहते थे), और बंडल url (उर) हमारे ऐप के फ़ोल्डर की ओर इशारा कर रहा था।
लेकिन MIME प्रकार जो ड्रॉपबॉक्स हमें हमारे लिंक के लिए वापस देता है, जिसे आप उदाहरण के लिए चेक कर सकते हैं
$ curl -D headers THEURLGOESHERE > /dev/null
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 27393 100 27393 0 0 24983 0 0:00:01 0:00:01 --:--:-- 28926
$ cat headers
HTTP/1.1 200 OK
accept-ranges: bytes
cache-control: max-age=0
content-disposition: attachment; filename="123.icz"
Content-Type: text/calendar
Date: Fri, 24 May 2013 17:41:28 GMT
etag: 872926d
pragma: public
Server: nginx
x-dropbox-request-id: 13bd327248d90fde
X-RequestId: bf9adc56934eff0bfb68a01d526eba1f
x-server-response-time: 379
Content-Length: 27393
Connection: keep-alive
सामग्री-प्रकार वही है जो हम चाहते हैं। ड्रॉपबॉक्स का दावा है कि यह एक पाठ / कैलेंडर प्रविष्टि है। महान। लेकिन मेरे मामले में, मैंने अपने ऐप के माइम प्रकारों में पाठ / कैलेंडर को पहले से ही पढ़ लिया है, और यह काम नहीं करता है। इसके बजाय, जब मैं पाठ / कैलेंडर के लिए UTI और बंडल url प्राप्त करने का प्रयास करता हूं,
NSString * UTI = (NSString *)UTTypeCreatePreferredIdentifierForTag(kUTTagClassMIMEType,
(CFStringRef)@"text/calendar",
NULL);
CFURLRef ur =UTTypeCopyDeclaringBundleURL(UTI);
मैं "com.apple.ical.ics" को UTI के रूप में देखता हूं और "... / MobileCoreTypes.bundle /" बंडल URL के रूप में। हमारा ऐप नहीं, बल्कि ऐपल। तो मैं LSItemContentTypes में com.apple.ical.ics को अपने स्वयं के साथ, और UTConformsTo में निर्यात में डालने की कोशिश करता हूं, लेकिन नहीं जाता।
इसलिए मूल रूप से, यदि Apple को लगता है कि वे किसी बिंदु पर फ़ाइल प्रकार के कुछ प्रकार को संभालना चाहते हैं (जो कि आपके ऐप के लाइव होने के 10 साल बाद बनाया जा सकता है, तो आपको बुरा लगता है), आपको एक्सटेंशन बदलने का कारण बनाना होगा क्योंकि वे आपको आसानी से हैंडल नहीं करने देंगे फ़ाइल प्रकार।
-application:didFinishLaunchingWithOptions:
ऐप में डेलिगेट केवल तभी कहा जाता है जब किसी फ़ाइल को संभालने के लिए आपके ऐप को बैकग्राउंड नहीं किया गया था।