2012-10-07 31 views
8

मैं अपने आईओएस ऐप के लिए एक विशेष यूटीआई प्रकार बनाने/निर्यात करने की कोशिश कर रहा हूं (जैसे Instagram विशेष रूप से UTI com.instagram.exclusivegram को कैसे प्रबंधित करता है)।एक्सक्लूसिव आईओएस यूटीआई

असल में, मैं com.photoapp.photo चाहता हूं कि ऐप क्या उपयोग कर सकता है यदि वे फोटो लेने के लिए पंजीकृत किसी भी ऐप में फोटो खोलने में सक्षम होना चाहते हैं (Instagram के com.instagram.photo के समान)। तो मैं com.photoapp.exclusive को केवल अपने ऐप में खोलने में सक्षम होना चाहता हूं (com.instagram.exclusivegram के समान)।

मैं अपने डिवाइस पर जो चल रहा हूं वह यह है कि com.photoapp.exclusive का उपयोग करते समय, UIDocumentController मुझे इसे PhotoApp या DropBox में खोलने के लिए संकेत देता है जहां यह केवल फ़ोटो ऐप होना चाहिए।

मेरे पास मेरा ऐप है जो यूटीआई के साथ-साथ एक उदाहरण ऐप पंजीकृत करता है जिसका उपयोग मैं खोलने की क्षमता पर जांच के लिए कर रहा हूं। कोड मैं उदाहरण के अनुप्रयोग में उपयोग कर रहा हूँ नीचे है:

if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"photoapp://"]]) { 
     NSData *imageData = UIImageJPEGRepresentation([UIImage imageNamed:@"derp.png"], 1.0); 
     NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
     NSString *fullPathToFile = [[paths objectAtIndex:0] stringByAppendingPathComponent:@"photoapp.pae"]; 
     [imageData writeToFile:fullPathToFile atomically:NO]; 

     interactionController = [UIDocumentInteractionController interactionControllerWithURL:[NSURL fileURLWithPath:[NSString stringWithFormat:@"file://%@", fullPathToFile]]]; 
     interactionController.UTI = @"com.photoapp.exclusive"; 
     interactionController.delegate = self; 

     [interactionController presentOpenInMenuFromRect:self.view.frame inView:self.view animated:YES]; 
    } 

और यहाँ मेरे ऐप के लिए मेरे plist फ़ाइल में मैं क्या है:

<key>UTExportedTypeDeclarations</key> 
<array> 
    <dict> 
     <key>UTTypeDescription</key> 
     <string>Exclusive PhotoApp Photo</string> 
     <key>UTTypeConformsTo</key> 
     <array> 
      <string>com.photoapp.photo</string> 
     </array> 
     <key>UTTypeIdentifier</key> 
     <string>com.photoapp.exclusive</string> 
     <key>UTTypeTagSpecification</key> 
     <dict> 
      <key>public.filename-extension</key> 
      <string>pae</string> 
     </dict> 
    </dict> 
    <dict> 
     <key>UTTypeTagSpecification</key> 
     <dict> 
      <key>public.filename-extension</key> 
      <string>pa</string> 
     </dict> 
     <key>UTTypeIdentifier</key> 
     <string>com.photoapp.photo</string> 
     <key>UTTypeDescription</key> 
     <string>PhotoApp Photo</string> 
     <key>UTTypeConformsTo</key> 
     <array> 
      <string>public.png</string> 
      <string>public.jpeg</string> 
     </array> 
    </dict> 
</array> 
<key>UIFileSharingEnabled</key> 
<true/> 
<key>CFBundleDocumentTypes</key> 
<array> 
    <dict> 
     <key>LSItemContentTypes</key> 
     <array> 
      <string>com.photoapp.exclusive</string> 
      <string>com.photoapp.photo</string> 
     </array> 
     <key>CFBundleTypeName</key> 
     <string>Photo</string> 
     <key>LSHandlerRank</key> 
     <string>Default</string> 
    </dict> 
</array> 
+1

जैसे ही आप निर्दिष्ट करते हैं कि आपका फ़ाइल प्रारूप 'public.png' या 'public.jpeg' या इसी तरह के अनुरूप है, सभी ऐप्स जो निर्दिष्ट करते हैं कि वे इन यूटीआई की फाइलें खोल सकते हैं उन्हें खोलने में सक्षम होंगे। यदि आप अपना 'UTTypeConformsTo' सरणी हटाते हैं, तो आपको अपनी समस्या का समाधान करना चाहिए। – Greg

+1

दूसरे शब्दों में, यह निर्दिष्ट न करें कि आपका 'com.photoapp.exclusive'' com.photoapp.photo' के अनुरूप है। 'Com.photoapp.photo' को छोड़ दें, और 'com.photoapp.exclusive' के लिए कोई अनुरूपता निर्दिष्ट न करें। – Greg

+0

धन्यवाद! क्या आप इसे एक टिप्पणी करना चाहते हैं ताकि मैं आपका उत्तर स्वीकार कर सकूं? – joshholat

उत्तर

5

जैसे ही आप इस तरह के रूप में एक यूटीआई द्वारा बताए गए अनुसार public.png या public.jpeg, सभी ऐप्स जो निर्दिष्ट करते हैं कि वे इन प्रकार की फ़ाइलों को खोल सकते हैं, आपकी फ़ाइल खोलने में सक्षम होंगे। इसलिए, यदि आप अपने com.photoapp.exclusive यूटीआई में किसी भी प्रकार का अनुरूपता निर्दिष्ट नहीं करते हैं, तो इसका समर्थन करने के लिए कोई भी ऐप्स दिखाई नहीं देगा।