6

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

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

但是,当我按下 Dropbox 图标时,什么也没有发生,在控制台中我看到以下文本:

LaunchServices: Invalid LSOpenOperation request - No applications found to open document

在应用程序的 plist 文件中,它注册具有 UTI com.mycompany.myapp.sainputs 的文档类型,并注册具有标识符 com.mycompany.myapp.sainputs 的导出类型 UTI,具有公共文件扩展名“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>

我尝试在 plist 文件中将 MIME 类型更改为“application/octet-stream”。这并没有什么不同。

任何建议/想法将不胜感激。

4

2 回答 2

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>

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

UIDocumentInteractionController *documentController = ...;
documentController.UTI = @"com.mycompany.myapp.sainputs";

可以在此处找到有关此的 Apple 文档。

于 2013-04-08T22:30:43.437 回答
0

如果这发生在其他人身上:

我无法让 Klaas 回答工作,因为我在设备上有另一个应用程序(“轻型”版本)也声明了相同的 UTI,但设置不正确。您需要在声明类型的每个应用程序中添加“public.data”,然后它才能工作。

只是为了确保,我建议只安装一个应用程序进行调试,然后添加另一个应用程序,看看一切是否仍然有效。

于 2014-10-31T09:39:41.473 回答