在 iOS 上,有文件提供程序 API来创建“虚拟文件夹”(应用程序提供内容的文件夹)。我怎么能在 MacOS 上做类似的事情?如果您想知道我为什么要这样做,那只是因为我想了解云存储应用程序的工作原理。
PS:抱歉英语不好,我是法国人。
我希望能够编辑托管在我自己的服务器上的就地Office 文件。就地我的意思是在 Office 中打开文件,对其进行编辑,然后将更改直接发送回我的应用程序/服务器。
我通过实现文件提供程序扩展来在文件应用程序(iOS 11+)中显示我的文件部分实现了这一点,它会自动启动 Office 应用程序并将更改上传到我的服务器。我还可以从 Office 的“打开”菜单浏览到我的文件,并就地进行编辑。
我想直接从我的应用程序触发这个流程。有任何想法吗?
我和许多人尝试遵循 Microsoft 的Integrate with Office指南,但它仅适用于 FileShare 或 OneDrive 中托管的文件。我想编辑托管在我自己的服务器中的文件。
edit-in-place ms-office ios office365 fileprovider-extension
我们为macOS 上的虚拟文件系统 (VFS )开发了内核扩展 (KEXT),以将我们的软件与 Adobe InDesign 或 Microsoft Word 等外部程序集成。我们的软件和 KEXT 被许多客户使用。
看起来 KEXT 已被弃用,并且可能会在 macOS 的未来版本中完全删除,特别是在基于 Apple Silicon 的计算机上。请参阅 Apple 在其 安全指南中的声明:
“这就是为什么我们强烈鼓励开发人员在 macOS 中删除对未来采用 Apple 芯片的 Mac 电脑的 kext 支持之前采用系统扩展”
因此,我们目前正在研究可能的替代方案。
Apple 建议迁移到系统扩展而不是 KEXT。然而,我们发现的唯一与 VFS 相关的 API 是实现一个基于NSFileProviderReplicatedExtension 的文件提供程序。
不幸的是,它NSFileProviderReplicatedExtension有几个缺陷:
enumerators. 因此,必须首先枚举(列出)文件夹内的所有内容。否则无法访问。但是,我们无法枚举我们的 VFS。我们的 VFS 的大部分内容都是完全动态的。它仅在客户端第一次访问时存在。此类动态内容还包括动态参数,例如客户端的区域设置或将放置图像的框的大小。由于我们事先不知道这些参数,因此我们无法提前枚举VFS的内容。这意味着,NSFileProviderReplicatedExtension当前状态下的 an 并不是“真实”VFS 的替代品,因此我们不能将其用作当前 VFS KEXT 的替代品。
我的问题:
macos vfs kernel-extension fileprovider-extension macos-system-extension
我是 macOS 开发新手。
我正在尝试开发 macOS FileProvider 扩展,一切都很好,直到我将 macOS 从 11 更新到 12.2。
更新操作系统后,FileProvider 扩展将不会被 NSFileProviderManager.add(domain) 加载,并且其完成处理程序返回错误 - NSFileProviderDomain.Error.providerNotFound
@IBAction func tapAddDomainButton(_ sender: Any) {
NSFileProviderManager.add(domain) { error in
print("Error: \(error)") // <- Error: Optional(Error Domain=NSFileProviderErrorDomain Code=-2001 "The application cannot be used right now." UserInfo={NSLocalizedDescription=The application cannot be used right now.})
}
Run Code Online (Sandbox Code Playgroud)
}
我在 Xcode 中使用默认 macOS > App +“文件提供程序扩展”创建了一个新的样板项目,但仍然遇到相同的错误。相同的代码适用于 macOS 11.6.1。
奇怪的是,苹果示例代码不会返回错误,并且在 macOS 12.2 中仍然有效。我找不到我的代码和Apple Sample Code之间的任何区别。
我在这里上传了我的测试项目。请帮忙
提前致谢。
附加信息:我的同事在 macOS 12.0.1/12.1 中进行了测试,我的测试项目运行良好。