UTI,这是我的应用程序独有的,并没有显示打开与对话框的Dropbox

时间:2013-10-20 07:32:37

标签: ios

我为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>

我做错了什么?

2 个答案:

答案 0 :(得分:0)

你试图坚持自己对用户的意志;永远不会结束。

你的问题实际上并不是由你造成的,所以':

DropBox,Evernote等。人。可能会声明他们自己的方案,他们允许所有文件;并且系统正常运行,给出所有匹配应用程序的列表(它将始终包含声明*的应用程序)。

换句话说,你要做的是:

  1. 不可能
  2. 不是设计意图
  3. 深度反社会

答案 1 :(得分:0)

我自己解决了这个问题。我是通过将导出的类型更改为基于public.data来实现的。

这是一个合乎逻辑的事情,因为我的应用程序导出的文件对于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>