2012-10-07 40 views
8

Tôi đang cố gắng để tạo ra/xuất khẩu một loại nhiễm trùng đường niệu độc quyền cho ứng dụng iOS của tôi (rất giống với cách Instagram độc quyền xử lý các com.instagram.exclusivegram UTI). Về cơ bản, tôi muốn com.photoapp.photo là ứng dụng có thể sử dụng nếu họ muốn có thể mở ảnh trong bất kỳ ứng dụng nào đã đăng ký chụp ảnh (tương tự như com.instagram.photo của Instagram). Sau đó, tôi muốn com.photoapp.exclusive chỉ có thể mở trong ứng dụng của tôi (tương tự như com.instagram.exclusivegram).Dành riêng iOS UTI

Những gì tôi đang chạy trên thiết bị của tôi là ngay cả khi sử dụng com.photoapp.exclusive, UIDocumentController nhắc tôi mở nó trong PhotoApp hoặc DropBox, nơi nó chỉ nên là PhotoApp.

Tôi có ứng dụng của tôi sẽ đăng ký UTI cũng như một ứng dụng ví dụ tôi đang sử dụng để kiểm tra khả năng khai mạc. Mã Tôi đang sử dụng trong ứng dụng ví dụ là dưới đây:

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]; 
    } 

Và đây là những gì tôi có trong file plist của tôi cho ứng dụng của tôi:

<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

Ngay sau khi bạn xác định rằng định dạng tập tin của bạn phù hợp cho 'public.png' hoặc' public.jpeg' hoặc tương tự, tất cả các ứng dụng mà xác định rằng họ có thể mở các file trong số này UTIs sẽ có thể mở chúng. Nếu bạn loại bỏ mảng 'UTTypeConformsTo', điều đó sẽ giải quyết vấn đề của bạn. – Greg

+1

Nói cách khác, không chỉ định rằng 'com.photoapp.exclusive' của bạn phù hợp với' com.photoapp.photo'. Để nguyên 'com.photoapp.photo', và không chỉ định bất kỳ sự phù hợp nào cho' com.photoapp.exclusive'. – Greg

+0

Cảm ơn! Bạn có muốn làm cho một bình luận để tôi có thể chấp nhận câu trả lời của bạn? – joshholat

Trả lời

5

Ngay khi bạn chỉ định một UTI như public.png hoặc public.jpeg, tất cả các ứng dụng chỉ định rằng chúng có thể mở tệp thuộc các loại này sẽ có thể mở tệp của bạn. Vì vậy, nếu bạn không chỉ định bất kỳ sự tuân thủ kiểu nào trong số com.photoapp.exclusive UTI của mình, sẽ không có ứng dụng nào xuất hiện để hỗ trợ nó.

Các vấn đề liên quan