【发布时间】:2020-07-05 06:37:43
【问题描述】:
我有一个操作扩展,我正在尝试共享 PDF 文件。
我正在使用为我自动生成的 ActionRequestHandler.swift 的样板代码:
func beginRequest(with context: NSExtensionContext) {
// Do not call super in an Action extension with no user interface
self.extensionContext = context
for item in context.inputItems as! [NSExtensionItem] {
if let attachments = item.attachments {
for itemProvider in attachments {
...
...
}
}
}
}
在其他应用中工作
当从除 Safari 之外的每个应用程序导出时,我得到的是:
没关系,我可以通过检查com.adobe.pdf 来验证它是pdf,然后我使用public.file-url 来获取共享文件。
Safari 失败
但是当从 Safari 导出时(无论我选择“自动”还是“Pdf”作为文件类型),我只会得到com.apple.property-list:
更多信息
Dropbox 和 OneDrive 都可以工作,所以它可以通过某种方式实现。
我还意识到,从受某种登录保护的 url 共享 PDF 不适用于“Public.file-url”,因为无法从 swift-code 内部访问该 URL。
这使我认为 java-script 预处理器可能是要走的路?用 JS 获取 pdf-contents 并传递给代码?
问题
如何使用com.apple.property-list 获取文件?
还是我做的一些配置有问题,因为我得到了这个属性列表而不是 pdf/url 组合?
【问题讨论】:
-
您是否尝试在 for-each 循环中使用带有“public.file-url”标识符的“loadItem”加载项目?
-
是的,我使用了“hasItemConformingToTypeIdentifier”,它匹配“public.item”、“public.data”和“com.apple.property-list”。我猜前两个匹配是因为 property-list 有数据作为超类,而“public.item”似乎是通用的。