无法 select 使用 UIDocumentPickerViewController 的 PowerPoint (PPTX) 文档
Unable to select a PowerPoint (PPTX) document with UIDocumentPickerViewController
只是为了先清理一些快速项目:
- 我不想打开 and/or 预览文档,因为我看到一个常见的答案是将用户引向一个依赖项来执行此操作
- 我不想 select 任何其他文件类型。我的应用程序特别想要获取 powerpoint 文档,然后将其传递给 API 调用
话虽如此,我无法让我的选择器允许我打开 PPTX,如下所示:
我已采取以下措施来尝试解决此问题:
我运行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)
但是,如初始图像所示,这不允许我 select 文件。因此,我希望找到缺失的部分,以便 selection 只是 powerpoint 文件。
** 更新 **
根据马特的评论,我确实将值添加到我的 plist 中,但仍然无法 select 文件。
我在 plist 和 UIDocumentPickerViewController
调用中使用 pptx
扩展进行了额外测试,但也没有成功。
org.openxmlformats.presentationml.presentation
由 iOS 定义,因此您无需将其包含在导入的类型中。该定义已由 iOS 导入。
如果您需要在共享 pptx 文件时让您的应用程序在共享 sheet 中可用,您只需添加一个 CFBundleDocumentTypes 条目。但是既然你说你只能处理这些文件,不能打开它们,这可能不合适。也许您想做的是编写一个共享扩展程序。
如果您只想在UIDocumentPickerViewController
中选择pptx文件,您不需要在您的plist文件中添加任何东西!!只需使用 documentTypes:["org.openxmlformats.presentationml.presentation"]
初始化您的选择器
最后,一些评论:
com.microsoft.powerpoint.ppt
是二进制 PowerPoint 文件 (.ppt) 的 UTI。对于 pptx,您需要 openxml 格式。
您无需为您的选择器声明支持、定义或添加任何其他类型的允许 UTI 列表。内容类型树 Spotlight 属性中列出的其他类型是 pptx 的父类型。例如,如果您将 public.presentation 添加到您的列表,您还可以打开 Keynote 文件。这可能不是你想要的。
只是为了先清理一些快速项目:
- 我不想打开 and/or 预览文档,因为我看到一个常见的答案是将用户引向一个依赖项来执行此操作
- 我不想 select 任何其他文件类型。我的应用程序特别想要获取 powerpoint 文档,然后将其传递给 API 调用
话虽如此,我无法让我的选择器允许我打开 PPTX,如下所示:
我已采取以下措施来尝试解决此问题:
我运行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)
但是,如初始图像所示,这不允许我 select 文件。因此,我希望找到缺失的部分,以便 selection 只是 powerpoint 文件。
** 更新 ** 根据马特的评论,我确实将值添加到我的 plist 中,但仍然无法 select 文件。
我在 plist 和 UIDocumentPickerViewController
调用中使用 pptx
扩展进行了额外测试,但也没有成功。
org.openxmlformats.presentationml.presentation
由 iOS 定义,因此您无需将其包含在导入的类型中。该定义已由 iOS 导入。
如果您需要在共享 pptx 文件时让您的应用程序在共享 sheet 中可用,您只需添加一个 CFBundleDocumentTypes 条目。但是既然你说你只能处理这些文件,不能打开它们,这可能不合适。也许您想做的是编写一个共享扩展程序。
如果您只想在
UIDocumentPickerViewController
中选择pptx文件,您不需要在您的plist文件中添加任何东西!!只需使用documentTypes:["org.openxmlformats.presentationml.presentation"]
初始化您的选择器
最后,一些评论:
com.microsoft.powerpoint.ppt
是二进制 PowerPoint 文件 (.ppt) 的 UTI。对于 pptx,您需要 openxml 格式。您无需为您的选择器声明支持、定义或添加任何其他类型的允许 UTI 列表。内容类型树 Spotlight 属性中列出的其他类型是 pptx 的父类型。例如,如果您将 public.presentation 添加到您的列表,您还可以打开 Keynote 文件。这可能不是你想要的。