8

我正在尝试为我的 iOS 应用程序创建/导出专有的 UTI 类型(非常类似于 Instagram 专门处理 UTI com.instagram.exclusivegram 的方式)。

基本上,我希望 com.photoapp.photo 成为一个应用程序可以使用的东西,如果他们希望能够在任何注册用于拍照的应用程序中打开照片(类似于 Instagram 的 com.instagram.photo)。然后我希望 com.photoapp.exclusive 只能在我的应用程序中打开(类似于 com.instagram.exclusivegram)。

我在我的设备上遇到的是,即使使用 com.photoapp.exclusive,UIDocumentController 也会提示我在 PhotoApp 或 DropBox 中打开它,它应该只是 PhotoApp。

我有注册 UTI 的应用程序以及用于检查打开能力的示例应用程序。我在示例应用程序中使用的代码如下:

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>
4

1 回答 1

5

一旦您指定了一个 UTI,例如public.pngpublic.jpeg,所有指定它们可以打开这些类型文件的应用程序都将能够打开您的文件。因此,如果您在com.photoapp.exclusiveUTI 中根本没有指定任何类型一致性,那么似乎没有应用程序支持它。

于 2012-10-13T12:55:26.553 回答