独家 iOS UTI

Posted

技术标签:

【中文标题】独家 iOS UTI【英文标题】:Exclusive iOS UTI 【发布时间】:2012-10-07 14:05:20 【问题描述】:

我正在尝试为我的 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>

【问题讨论】:

一旦您指定您的文件格式符合public.pngpublic.jpeg 或类似格式,所有指定它们可以打开这些UTI 文件的应用程序都将能够打开它们。如果您删除 UTTypeConformsTo 数组,那应该可以解决您的问题。 换句话说,不要指定您的com.photoapp.exclusive 符合com.photoapp.photo。保持 com.photoapp.photo 不变,只是不要为 com.photoapp.exclusive 指定任何一致性。 谢谢!你想发表评论以便我接受你的回答吗? 【参考方案1】:

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

【讨论】:

以上是关于独家 iOS UTI的主要内容,如果未能解决你的问题,请参考以下文章

06 项目准备独家秘笈

Android Jetpack架构组件(入门教程及进阶实战)独家首发

独家下载|《阿里云MaxCompute百问百答》 解锁SaaS模式云数据仓库尽在本电子手册!

iOS图书动画

【猴姆独家】High爆了!2011年61首欧美流行金曲极品大混音串烧mv!这54分钟我不蛋腚 跪求全部歌曲名单 谢谢

4K测试工具沙发管家独家首发,V4.5.7更新