问题标签 [fileprovider-extension]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
933 浏览

macos - 无法在 macOS 10.15 上启动新的 FileProvider 扩展

我试图让File Provider 扩展macOS 10.15 Beta 7 (19A546d)Xcode 11 Beta (11M392r) 上工作,到目前为止还没有设法让它与示例项目一起启动。文档非常缺乏,一定有我错过的东西。


更新

macOS Beta 8 (19A558d)Xcode 11 GM (11A419c)中,NSFileProviderExtensionMac 应用程序不再可用。但是文档说它可用于 Mac Catalyst 应用程序。

当我尝试使用文件提供程序扩展构建 Mac Catalyst 应用程序时,我收到以下错误:

错误:“TestFPExtension.appex”是文件提供程序扩展,在为 Mac Catalyst 构建时不可用。您可能需要限制应在目标编辑器中嵌入此应用程序扩展的平台。(在项目“TestFP2”的目标“TestFP2”中)

错误:为 Mac Catalyst 构建时文件提供程序扩展不可用。(在项目“TestFP2”的目标“TestFPExtension”中)

该应用程序在 iOS 上构建时没有错误。似乎这个 File Provider API 在 Mac 上根本不可用。


原始问题

我有一个 Mac 应用程序,它在启动时执行以下操作:

我有时会收到此错误,不知道为什么:

无法为域添加文件提供程序:错误域 = NSFileProviderInternalErrorDomain 代码 = 3“值“com.myappbundleid”对于参数“callerBundleID”无效。” UserInfo={NSLocalizedDescription=值“com.myappbundleid”对于参数“callerBundleID”无效。}

  该错误可以通过killall Finder终端中的命令解决,然后它成功运行并输出:

文件提供者 URL:/Users/[用户名]/Library/Group Containers/group.com.myappgroup/File Provider Storage

  在 Finder 中,“File Provider Storage”文件夹会出现一个云徽章,这似乎没问题。我猜。

我有我的文件提供程序扩展类,它基本上是当我在 Xcode 中将文件提供程序扩展目标添加到我的 Mac 应用程序时生成的代码:

这里File provider initialized永远不会记录消息,并且永远不会初始化扩展。我根本无法启动它。

在 Console.app 中,这是我能找到的唯一相关消息:

默认 09:14:35.447849+0200 lsd com.apple.launchservices - 45683955:检查应用程序是否在 file:///Users/laszlo.agardi/Library/Developer/Xcode/DerivedData/FileProviderMacTest-eebpahoydvfxovantvhkplhgrcty/Build/Products/ 管理Debug/FileProviderMacTest.app/Contents/PlugIns/FileProviderExt.appex//com.myapp.fptest.FileProviderExt

到目前为止我做了什么:

  • 应用程序和扩展程序是沙盒的,它在权利文件中设置
  • 应用程序和扩展程序共享同一个应用程序组,也在权利中设置
  • 尝试启动扩展:
    • 从 Xcode 运行文件提供程序,Xcode 正在等待扩展启动
    • 我在 Finder 中打开了 File Provider Storage 文件夹,它有云徽章。但是内部没有文件操作或只是浏览启动文件提供程序扩展

我错过了什么?如何让文件提供程序扩展在 macOS Catalina 上启动?

0 投票
0 回答
338 浏览

xcode11 - Xcode 11 中缺少 macOS 的文件提供程序扩展

更新: 我发现 File Provider Extension API 已从Catalina features page中删除。这是否意味着此功能在 macOS Catalina 上不可用?


我在 macOS Catalina beta.8 上将 Xcode 升级到 Xcode 11 GM2(11A420a)。然后我尝试通过单击创建应用程序扩展File > New > Target,发现 macOS 的应用程序扩展列表中缺少 File Provider 扩展。

我记得我可以在以前的 Xcode 11 测试版中为 macOS 创建文件提供程序扩展。现在该怎么办?

0 投票
2 回答
557 浏览

swift - 如何将文件提供程序添加到 MacOS Swift 应用程序?

在 iOS 上,有File Provider API来创建“虚拟文件夹”(内容由应用程序提供的文件夹)。我怎么能在 MacOS 上做类似的事情?如果您想知道我为什么要这样做,那只是我试图了解云存储应用程序的工作原理。

PS:对不起英语不好,我是法国人。

0 投票
1 回答
851 浏览

macos - 如何启用和调试 macOS 文件提供程序扩展?

我正在尝试在带有文件提供程序扩展的 macOS Big Sur 11.2.2 上使用 Xcode 12.5 Beta 3 构建准系统应用程序。我使用 Xcode 的 beta 版本,因为以前的版本不提供文件提供程序扩展的模板(GitHub 上的示例项目)。

该应用程序及其扩展程序在其权利中设置了一个通用应用程序组,并由我的个人团队和开发证书自动签名。

我构建并运行了我的应用程序和扩展程序。但是,据我所知,我现在可以控制它何时(卸载),因为这取决于系统。

观察

  1. 文件提供程序扩展永远不会出现在系统首选项中。
  2. 控制台应用程序不提供具有不同项目名称的任何有意义的信息,除了“lsd (LaunchServices)”检查应用程序是否受管理。
  3. 扩展程序不会显示在活动监视器中。
  4. Pluginkit 报告要找到的扩展,但会添加一个感叹号(运行时pluginkit -vvvvmi SomeOrganization.SomeProduct.SomeProvider)。
  1. 通过子系统过滤系统控制台com.apple.FileProvider我在构建扩展后偶然发现了这些消息(我必须按照这个答案中的描述显示私有值):

还有另外两个PhotosFileProvidercom.apple.CloudDocs.MobileDocumentsFileProvider我猜)是无关的。报告相同的PhotosFileProvider警告。上述路径可以扩展为:

其中包含Domains.plist具有此(二进制)内容:

问题

我没有找到任何关于感叹号的含义或如何找出实际问题的信息。我该如何调试呢?控制台中的错误令人怀疑。在我看来,我在拼图中遗漏了一些在文档中没有提到的部分,比如操作方法中的一个秘密步骤。

供参考:我在 Apple Developer Forums 中的问题

0 投票
1 回答
170 浏览

macos-big-sur - macOS 上的文件提供程序 API:如何初始化?

我正在尝试从头开始构建一个 macOS 应用程序,该应用程序利用 macOS Big Sur 附带的新文件提供程序 API 。幸运的是,Xcode 的最新版本 12.5 beta 3 带有一个文件提供程序扩展,我可以轻松地将它添加到我的 macOS 应用程序中(通过文件、新建...、目标...、文件提供程序扩展)。

我不清楚的是如何以及在何处初始化此文件提供程序 API。我尝试AppDelegate.swift根据在 Internet 上找到的一些代码来执行此操作。但是当我启动应用程序时,我会在 Xcode 的调试控制台中记录以下代码:

我不明白为什么找不到文件提供程序,因为它(或至少应该)嵌入到项目中。该扩展是沙盒的(似乎也是一项要求),并且该应用程序使用我的开发证书进行了代码签名。我也看不到 Finder Locations 部分中显示的任何内容。

为了不用在这里贴多页源代码,我把代码放到了GitHub 上。感谢您的关注!对此的任何帮助都将受到高度赞赏。

0 投票
2 回答
249 浏览

macos - macOS M1 上虚拟文件系统 (VFS) 内核扩展的替代方案

我们为 macOS 上的虚拟文件系统 (VFS)开发了内核扩展 (KEXT) ,以将我们的软件与 Adob​​e InDesign 或 Microsoft Word 等外部​​程序集成。我们的许多客户都在使用我们的软件和 KEXT。

因为看起来 KEXT 已被弃用,并且可能会在 macOS 的未来版本中完全删除,尤其是在基于 Apple Silicon 的计算机上。参见 Apple 在其 安全指南中的公告:

“这就是为什么强烈鼓励开发人员在 kext 支持从 macOS 中删除之前采用系统扩展,以用于未来使用 Apple 芯片的 Mac 计算机”

因此,我们目前正在研究可能的替代方案。

Apple 建议迁移到系统扩展而不是 KEXT。然而,我们发现唯一与 VFS 相关的 API 是实现一个基于NSFileProviderReplicatedExtension的文件提供程序

不幸的是,它NSFileProviderReplicatedExtension有几个缺陷:

  1. 文件可以在云端或下载。不能只下载/读取文件的一部分。这对我们来说是一个很大的性能问题,因为我们处理的是大图像(> 1GB)。我们集成的程序通常只读取图像的一部分,例如嵌入的预览。API 不提供访问文件的选定块(随机访问文件)的方法。
  2. 文件提供程序通过 了解文件系统内容enumerators。因此,必须首先枚举(列出)文件夹内的所有内容。否则无法访问。但是,我们无法枚举我们的 VFS。我们 VFS 的大部分内容都是完全动态的。它仅在客户端第一次访问时才存在。此类动态内容还包括动态参数,例如客户端的区域设置或将放置图像的框的大小。由于我们事先不知道这些参数,因此我们无法提前枚举 VFS 的内容。

这意味着,NSFileProviderReplicatedExtension在其当前状态下,它不能替代“真正的”VFS,因此我们不能将其用作当前 VFS KEXT 的替代品。

我的问题:

  1. Apple 是否也允许在(基于 Apple Silicon/M1 的)操作系统的未来版本中进行内核扩展?或者至少有一个明确的截止日期?
  2. 如果不是,Apple 官方建议替代基于 KEXT 的 VFS 解决方案是什么?
  3. NSFileProviderReplicatedExtension 的 API 是否会被改进以表现得像一个“真实”的文件系统,从而使上述缺陷不再是问题?

非常感谢您的任何回答或评论!

最好的祝福,

迈克尔

0 投票
0 回答
44 浏览

ios - 为文件提供程序扩展附加调试器

我正在为 iOS 开发一个文件提供程序扩展。没有明显的原因,调试器随机停止附加。

我正在跑步Xcode Version 12.5.1 (12E507)

我创建了一个新的项目设置:

  • 文件 -> 新建 -> 项目... -> 多平台 -> 应用程序

然后添加扩展名:

  • 文件 -> 新建 -> 目标... -> iOS -> 文件提供程序扩展

最初它工作得很好,我正在通过(模拟器和真正的 iPhone 设备)调试扩展:

  • 运行 -> 选择要运行的应用程序:文件

我能够在输出窗口中看到扩展程序的日志并使用断点调试代码。在某些时候,调试器停止附加,而是似乎文件的日志显示在输出窗口中,而不是扩展的。

我试图清理构建文件夹,在设备和模拟器之间切换,重新启动,手动将调试器附加到扩展程序的进程,......似乎没有任何区别。但是,有时它会在没有进行任何更改的情况下再次随机运行。

是否有解释为什么会发生这种情况以及如何获得稳定的设置?

0 投票
1 回答
88 浏览

macos - How to retrieve the XPC service of a file provider extension on macOS?

I have extended my example project from my previous question with an attempt to establish an XPC connection.

In a different project we have successfully implemented the file provider for iOS. The exposed service must be resolved by URLs it is responsible for. On iOS it is the only possibility and on macOS it appears like that, too. Because on macOS the system takes care of managing files there are no URLs except the one which can be resolved through NSFileProviderItemIdentifier.rootContainer.

In the AppDelegate.didFinishLaunching() method I try to retrieve the service like this (see linked code for full reference, I do not want to unnecessarily bloat this question page for now):

The delivered list always is empty. However the extension is creating a service source on initialization which creates an NSXPCListener which has an NSXPCListenerDelegate that exports the NSFileProviderReplicatedExtension object on new connections. What am I missing?

Suspicious: serviceName of the FileProviderServiceSource never is queried. We are out of ideas why this is not working.

0 投票
3 回答
87 浏览

macos - FileProviderExtension 不会在 macOS 12.2 中加载

我是 macOS 开发的新手。

我正在尝试开发 macOS FileProvider 扩展,在我将 macOS 从 11 更新到 12.2 之前一切都很好。

更新操作系统后,NSFileProviderManager.add(domain) 不会加载 FileProvider 扩展,并且其完成处理程序返回错误 - NSFileProviderDomain.Error.providerNotFound

}

我在 Xcode 中使用默认 macOS > App + 'File Provider Extension' 制作了一个新的样板项目,但仍然出现相同的错误。相同的代码适用于 macOS 11.6.1。

奇怪的是,苹果示例代码不会返回错误,并且在 macOS 12.2 中仍然有效。我找不到我的代码和Apple Sample Code之间的任何区别。

在这里上传了我的测试项目。请帮忙

提前致谢。

附加信息:我的同事在 macOS 12.0.1/12.1 中进行了测试,我的测试项目运行良好。

0 投票
0 回答
12 浏览

macos - 是否有 macOS 文件提供程序环回示例?

我正在尝试学习如何制作macOS 文件提供程序扩展,并且我正在寻找macOS 文件提供程序源代码示例。

我对 macFUSE 非常熟悉,它有很棒的LoopbackFS示例,其中本地文件夹被模拟为虚拟文件系统示例的远程存储。

如果macOS File Provider Extension有类似的东西,那就太好了:一个使用本地文件夹作为远程备份存储的示例,并且扩展实现了下同步/上同步。

有谁知道网上是否有类似的例子?

注意:我知道 Apple 的 WWDC FileProvider 示例,但我发现现阶段学习它太复杂了。