独家 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.png
或public.jpeg
或类似格式,所有指定它们可以打开这些UTI 文件的应用程序都将能够打开它们。如果您删除 UTTypeConformsTo
数组,那应该可以解决您的问题。
换句话说,不要指定您的com.photoapp.exclusive
符合com.photoapp.photo
。保持 com.photoapp.photo
不变,只是不要为 com.photoapp.exclusive
指定任何一致性。
谢谢!你想发表评论以便我接受你的回答吗?
【参考方案1】:
只要您指定了诸如 public.png
或 public.jpeg
之类的 UTI,所有指定它们可以打开这些类型文件的应用都将能够打开您的文件。因此,如果您在 com.photoapp.exclusive
UTI 中根本没有指定任何类型一致性,那么似乎没有应用程序支持它。
【讨论】:
以上是关于独家 iOS UTI的主要内容,如果未能解决你的问题,请参考以下文章
Android Jetpack架构组件(入门教程及进阶实战)独家首发
独家下载|《阿里云MaxCompute百问百答》 解锁SaaS模式云数据仓库尽在本电子手册!