NSWorkspace openURL 未使用文件类型的默认应用程序打开存储在 iCloud Drive 中的文件

Posted

技术标签:

【中文标题】NSWorkspace openURL 未使用文件类型的默认应用程序打开存储在 iCloud Drive 中的文件【英文标题】:NSWorkspace openURL not opening files stored in iCloud Drive with default app for file type 【发布时间】:2015-08-20 21:53:36 【问题描述】:

在我的应用程序中,我使用以下代码告诉 Mac OS X 在指定的 URL 打开文件:

[[NSWorkspace sharedWorkspace] openURL:fileURL];

fileURL 是存储在我的应用的 iCloud Drive 容器文件夹中的文件的 URL。

在 El Capitan 中,似乎当文件被放置在应用的 iCloud Drive 容器中时,该文件的所有者会更改为拥有该 iCloud Drive 容器的应用。

在我的情况下,这意味着我自己的应用程序被要求为存储在我的应用程序的 iCloud Drive 容器中的文件打开任何文件类型。如果您将相同的文件移动到桌面,原始默认应用程序将正确启动。

还有其他人看到 El Capitan 的这种新行为吗?

我已经为它提交了雷达:rdar://22213595

希望有人找到了解决方法。如果文件存储在 iCloud Drive 中,则对于使用 NSWorkspace 的 openURL 命令的任何应用程序都会出现问题。仅仅因为我从我的应用程序链接到一个文件,并不意味着我的应用程序应该负责打开它。例如,iTunes 应该打开音乐文件,Preview 应该打开 PDF,Excel 应该打开 .xlsx 文件,当然除非用户另有说明。

文件驻留在某人驱动器上的哪个位置来确定使用哪个应用程序打开它并不重要。

【问题讨论】:

我的应用程序现在与 10.11 有同样的问题 我已向 Apple 提出技术请求。我不知道如何解决这个问题。 如果 Apple 为您提供了针对此问题的解决方案,请在此处回复。我知道,既然 El Capitan 出来了,我的客户很快就会开始问我这个问题。 【参考方案1】:

这是来自 Apple 的当前状态:

“我们的 iCloud 团队提到这是对 El Capitan 的有意更改,但我仍在与他们核对背后的逻辑,以及是否有任何改变这种行为的方法。我会在收到他们的回复后通知你。”

【讨论】:

以上是关于NSWorkspace openURL 未使用文件类型的默认应用程序打开存储在 iCloud Drive 中的文件的主要内容,如果未能解决你的问题,请参考以下文章

应用程序:openURL:选项:从 Firebase 动态链接安装应用程序后首次打开应用程序时未调用

CFNotificationCenter 中的 NSWorkspace 通知

python 使用PyObjC和NSWorkspace设置桌面图片。我是个伪君子!

Snow Leopard 中 NSWorkspace 和 NSNotificationCentre 的基于块的 API 存在问题

NSWorkSpace' showSearchResultsForQueryString:在 10.14 中不起作用

application:openURL:sourceApplication:annotation: 有 MainWindow.xib 时不调用