我为iOS应用定义了一个自定义UTI,并通过AirDrop传输文件。除了在我的应用程序之外,在接收设备上,用户可以选择DropBox,Evernote等应用程序。我想阻止这一点,所以用户只显示我的应用程序作为选择。这可能吗?
在我的info.plist中,我有:
<key>CFBundleDocumentTypes</key>
<array>
<dict>
<key>CFBundleTypeIconFiles</key>
<array>
<string>Icon.png</string>
</array>
<key>CFBundleTypeName</key>
<string>My Text</string>
<key>CFBundleTypeRole</key>
<string>Viewer</string>
<key>LSHandlerRank</key>
<string>Owner</string>
<key>LSItemContentTypes</key>
<array>
<string>com.me.text</string>
</array>
</dict>
</array>
<key>UTExportedTypeDeclarations</key>
<array>
<dict>
<key>UTTypeDescription</key>
<string>My Text</string>
<key>UTTypeIdentifier</key>
<string>com.me.text</string>
<key>UTTypeTagSpecification</key>
<dict>
<key>public.filename-extension</key>
<string>per</string>
</dict>
</dict>
</array>
我做错了什么?
答案 0 :(得分:0)
你试图坚持自己对用户的意志;永远不会结束。
你的问题实际上并不是由你造成的,所以':
DropBox,Evernote等。人。可能会声明他们自己的方案,他们允许所有文件;并且系统正常运行,给出所有匹配应用程序的列表(它将始终包含声明*
的应用程序)。
换句话说,你要做的是:
答案 1 :(得分:0)
这是一个合乎逻辑的事情,因为我的应用程序导出的文件对于Evernote等没有任何意义。我将它指定为文本是不正确的,因为这会让用户感到困惑 - 推送一个对话框给了他们他们不合逻辑的选择。与此处另一张海报的说法相反,这不是“对用户施加意志”的情况,而是错误地指定用于另一个程序解析为文本文件的结构化文件。基于public.data修复此问题,现在用户可以获得更好的体验。
对于可能感兴趣的其他人,我的UTExportedTypeDeclations现在看起来像这样:
<key>UTExportedTypeDeclarations</key>
<array>
<dict>
<key>UTTypeConformsTo</key>
<array>
<string>public.data</string>
</array>
<key>UTTypeDescription</key>
<string>My Text</string>
<key>UTTypeIdentifier</key>
<string>com.me.text</string>
<key>UTTypeTagSpecification</key>
<dict>
<key>public.filename-extension</key>
<string>per</string>
</dict>
</dict>
</array>