无法使用UIDocumentPickerViewController选择PowerPoint(PPTX)文档

时间:2018-07-23 18:43:04

标签: ios swift uti uidocumentpickerviewcontroller

只需先清除一些快速事项:

  1. 我不想打开和/或预览文档,因为我看到一个常见的答案,将用户引向执行此操作的依赖项
  2. 我不想选择任何其他文件类型。我的应用程序特别想获取一张PowerPoint文档,然后将其传递给API调用

说了这么多,我一直无法让我的选择器允许我打开PPTX,如下所示: enter image description here

我已采取以下措施尝试解决此问题:

我对文件运行mdls -name kMDItemContentTypeTree test.pptx以获取其内容类型。

kMDItemContentTypeTree = (
    "org.openxmlformats.presentationml.presentation",
    "public.data",
    "public.composite-content",
    "public.archive",
    "public.item",
    "org.openxmlformats.presentationml.presentation",
    "org.openxmlformats.openxml",
    "public.zip-archive",
    "public.presentation",
    "public.content",
    "com.pkware.zip-archive" )

然后我将其添加到info.plist文件中,如下所示:

<dict>
    <key>LSItemContentTypes</key>
    <array>
        <string>org.openxmlformats.presentationml.presentation</string>
        <string>public.data</string>
        <string>public.composite-content</string>
        <string>public.archive</string>
        <string>public.item</string>
        <string>org.openxmlformats.presentationml.presentation</string>
        <string>org.openxmlformats.openxml</string>
        <string>public.zip-archive</string>
        <string>public.presentation</string>
        <string>public.content</string>
        <string>com.pkware.zip-archive</string>
    </array>
    <key>CFBundleTypeName</key>
    <string>PPTX</string>
    <key>LSHandlerRank</key>
    <string>Alternate</string>
</dict>

然后,我引用了此Apple site以获得Powerpoint的UTI。

  

com.microsoft.powerpoint.ppt

最后,我像这样建立电话:

let powerpointType = "com.microsoft.powerpoint.​ppt"
let documentPicker = UIDocumentPickerViewController(documentTypes: [powerpointType], 
                                                    in: .import)

但是,如初始图像所示,这不允许我选择文件。因此,我希望找到缺少的部分,以便仅选择PowerPoint文件。

**更新** 根据马特的评论,我确实将值添加到了plist中,但仍然无法选择文件。

enter image description here

我另外在plist和pptx调用中使用了UIDocumentPickerViewController扩展名也没有成功。

1 个答案:

答案 0 :(得分:1)

org.openxmlformats.presentationml.presentation由iOS定义,因此您无需在导入的类型中包括它。该定义已由iOS导入。

  • 如果需要在共享pptx文件时使应用程序在共享表中可用,则只需添加CFBundleDocumentTypes条目。但是由于您说只能处理这些文件,而不能打开它们,所以这可能不合适。也许您想写的是共享扩展。

  • 如果只想选择UIDocumentPickerViewController中的pptx文件,则无需在plist文件中添加任何内容!只需使用documentTypes:["org.openxmlformats.presentationml.presentation"]

  • 来启动选择器

最后,一些评论:

  • com.microsoft.powerpoint.​ppt是二进制PowerPoint文件(.ppt)的UTI。对于pptx,您需要使用openxmlformats。

  • 您不需要声明支持,定义其他选择器或将其添加到选择器的允许UTI列表中。内容类型树的Spotlight属性中列出的其他类型是pptx的父类型。例如,如果将public.presentation添加到列表中,则还可以打开Keynote文件。这可能不是您想要的。