我有一个 Action Extension,我正在尝试共享 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 {
...
...
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
从除 Safari 之外的每个应用程序导出时,我得到的是:
这一切都可以,我可以通过检查来验证它是否是一个pdf com.adobe.pdf,然后我使用public.file-url来获取共享文件。
但是当从 Safari 导出时(无论我选择“自动”还是“Pdf”文件类型都没有关系),我只得到com.apple.property-list:
Dropbox 和 OneDrive 都可以使用,因此可以通过某种方式实现。
我还意识到,从受某种登录保护的 URL 共享 PDF 不适用于“Public.file-url”,因为无法从 swift 代码内部访问该 URL。
这让我想到 java 脚本预处理器可能是正确的选择?用JS获取pdf内容并将其传递给代码?
如何使用com.apple.property-list来获取文件?或者我做的某些配置有问题,因为我得到的是这个属性列表而不是 pdf/url 组合?
虽然我没能找到原始问题的解决方案,但我确实解决了问题。
添加操作扩展时,可以选择Action type:
我选择了,No user interface因为那是我想要的。
这给了我一个Action.js文件和ActionRequestHandler.swift:
class ActionRequestHandler: NSObject, NSExtensionRequestHandling {
...
}
Run Code Online (Sandbox Code Playgroud)
这些文件似乎在一个系统中工作,其中 Action.js 应该获取/操作源页面,然后将信息发送到支持 Swift 代码。正如我最初的问题中所述,从 Safari 共享 PDF 时,不会附加 PDF-URL。
如果我选择Presents user interface,我会得到另一个设置ActionViewController.swift:
class ActionViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Get the item[s] we're handling from the extension context.
for item in self.extensionContext!.inputItems as! [NSExtensionItem] {
for provider in item.attachments! {
if provider.hasItemConformingToTypeIdentifier(kUTTypePDF as String) {
provider.loadItem(forTypeIdentifier: kUTTypePDF as String, options: nil, completionHandler: { (pdfUrl, error) in
OperationQueue.main.addOperation {
if let pdfUrl = pdfUrl as? URL {
// pdfUrl now contains the path to the shared pdf data
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
该文件/解决方案按预期工作,extensionContext并填充attachment符合kUTTypePDF预期的文件/解决方案。
为什么这有效,而“无图形用户界面”方法却无效,我不知道。错误还是功能?
我还没有找到任何关于如何/为什么这应该在苹果开发者部分工作的文档,“共享扩展”文档非常简单。
| 归档时间: |
|
| 查看次数: |
1064 次 |
| 最近记录: |