iOS:使用UIDocumentInteractionController将特定于应用程序的文件发送到Dropbox时出错

bgh*_*bgh 6 cocoa-touch mime dropbox uti ios

我正在开发一个iOS应用程序,它允许通过电子邮件发送文件来导出数据.该应用程序将文件类型注册为具有扩展名"sainputs"的文件(这样,应用程序也可以通过电子邮件或保管箱打开文件以导入值 - 这样可以正常工作).我试图添加将文件发送到任何其他可以打开各种类型的文件的应用程序的可能性.Dropbox就是一个很好的例子 - 它应该能够打开任何类型的文件.

我目前正在通过显示使用该文件的URL初始化的UIDocumentInteractionController来尝试此操作.显示时,Dropbox应用程序将显示为打开文件的可用选项之一,如预期的那样.

但是,当我按下Dropbox图标时,没有任何反应,在控制台中我看到以下文字:

LaunchServices: Invalid LSOpenOperation request - No applications found to open document
Run Code Online (Sandbox Code Playgroud)

在app的plist文件中,它注册了一个具有UTI com.mycompany.myapp.sainputs的文档类型,它注册了一个导出类型UTI,其标识符为com.mycompany.myapp.sainputs,公共文件扩展名为"sainputs",MIME类型为myapp /输入.

以下是plist文件的相关摘录:

<key>CFBundleDocumentTypes</key>
    <array>
        <dict>
            <key>CFBundleTypeName</key>
            <string>My App's File Type</string>
            <key>LSHandlerRank</key>
            <string>Owner</string>
            <key>LSItemContentTypes</key>
            <array>
                <string>com.mycompany.myapp.sainputs</string>
            </array>
        </dict>
        <array>
.
.
.
<key>UTExportedTypeDeclarations</key>
    <array>
        <dict>
            <key>UTTypeConformsTo</key>
            <array/>
            <key>UTTypeDescription</key>
            <string>My App's File Type</string>
            <key>UTTypeIdentifier</key>
            <string>com.mycompany.myapp.sainputs</string>
            <key>UTTypeTagSpecification</key>
            <dict>
                <key>public.filename-extension</key>
                <string>sainputs</string>
                <key>public.mime-type</key>
                <string>steuerapp/inputs</string>
            </dict>
        </dict>
        <array>
Run Code Online (Sandbox Code Playgroud)

我尝试在plist文件中将MIME类型更改为"application/octet-stream".它没有任何区别.

任何建议/想法将受到高度赞赏.

Kla*_*aas 5

正如@maddy建议和@bgh确认的那样,这解决了这个问题.我刚遇到同样的问题.

除了定义您的自定义通用类型,您还可以提示此类型是更通用类型的"子类型".例如,通过在密钥UTTypeConformsTo中显式指定UTI'public.data',如下所示:

<dict>
   <key>UTTypeConformsTo</key>
      <array>
         <string>public.data</string>
      </array>
   <key>UTTypeDescription</key>
      <string>My App's File Type</string>
   <key>UTTypeIdentifier</key>
      <string>com.mycompany.myapp.sainputs</string>
   <key>UTTypeTagSpecification</key>
      <dict>
        <key>public.filename-extension</key>
           <string>sainputs</string>
        <key>public.mime-type</key>
           <string>steuerapp/inputs</string>
      </dict>
</dict>
Run Code Online (Sandbox Code Playgroud)

然后,您可以在UIDocumentInteractionController中将自定义uti指定为参数:

UIDocumentInteractionController *documentController = ...;
documentController.UTI = @"com.mycompany.myapp.sainputs";
Run Code Online (Sandbox Code Playgroud)

关于此的苹果文档可以在这里找到.