gpt4 book ai didi

swift - 如何在 Swift 'Share App Extension' 中获取附件的 (NSItemProvider) 文件路径?

转载 作者:行者123 更新时间:2023-12-01 15:00:42 24 4
gpt4 key购买 nike

注意:我对 Swift 编程非常陌生(仅 2 天),我正在处理这段代码作为一个ElectronJS项目。所以请不要介意我对语言基础知识的无知。谢谢。

我创建了一个包含Share App Extension 的 Swift 应用。

要求:

  1. Share App Extension 应该能够将共享文件的绝对文件路径发送到容器应用程序,即如果用户选择 一个文件(abc.txt)从 Finder 中的 Desktop 和共享到我的应用程序,然后 Share App Extension 应该能够将文件路径获取为

    /users/userName/Desktop/abc.txt

    我在这里苦苦挣扎的是如何获取与 Share App Extension 共享的文件的文件路径。获取 NSExtensionItem 中附件的文件路径的方法是什么,它可用于 Share App Extension 还是可从其他对象获得?

    (我能够成功地使用 App GroupsShare App ExtensionApplication 之间共享数据)

    <
  2. 在最终项目中,Share App Extension 成为 ElectronJS 的一部分项目如前所述。

    是否有一种标准方法可以将上述信息(附件的文件路径)从 Share App Extension 共享到 Electron 应用程序的主/渲染进程。

最佳答案

我在下面分享解决方案。请记住,这些可能不是最佳解决方案,我愿意接受建议。

第 1 点的解决方案:

简报:用户从 Finder 选择文件,通过在操作系统中注册的应用程序的 Share App Extension 共享,如果选择的 extension contextShare App Extension 匹配。这样做后,Share App Extension 会收到 extension context 以及 NSExtensionItemNSExtensionItem 对象包含 NSItemProvider 对象,这是您为通过 Share App Extension 共享的所有文件(附件)获取的对象。

现在,对于您通过 Share App Extension 接收的每个项目类型,在查找您的函数通过 hasItemConforminToTypeIdentifier(_:) 识别的数据之后,您可以使用UTI(统一类型标识符)来标识其数据。

补救措施:在这里,关键的部分是了解应该首先将其输入文件视为类型:kUTTypeURL。然后,在 NSItemProvider 对象的 loadItem 方法的 completionHandler 中,我们会得到 NSURL,这基本上就是文件我正在寻找的路径。

第 2 点的解决方案:

简报:Share App Extension 可以用 Swift 编写,但我们项目中的主应用却没有!主要应用程序是用 ElectronJS 编写的,离与 Swift 集成还差得很远!除了用 ElectronJS 编写的应用程序能够以 dmg 应用程序的形式打包之外,就目前而言,ElectronJS 和 Swift 之间几乎没有可集成性语言和框架交织的问题。

前提:因此,前提是能够共享先前提取的文件路径,以便从 Share App Extension(用 Swift 编写)传递到主应用程序(用 ElectronJS 编写)。现在,如果主应用程序是 Cocoa 应用程序,事情就会容易得多。如果它们都属于同一个 App group,那么使用 Swift API 它们可以同步读取/写入共享内存。然而,问题出现了,因为这些 API 在 ElectronJS 中不可用。一种补救方法是使用 nodeJS 库在 ElectronJS 应用程序的沙盒环境中运行 Swift 代码。然而,沙盒环境在数据共享方面有其自身的细微差别。因此,我暂时搁置了这种方法。

因此,我现在选择的方法是使用 App Data Directory 来共享此中间信息。 Share App Extension 将在应用程序的 App Data 目录中写入文件路径信息,而 ElectronJS 应用程序将使用 nodeJs API 来访问此信息。请记住,这是一种非常原始的方法,需要做些微不足道的工作,但这种特殊情况的要求无论如何不需要严格的安全措施。

但是,我正在积极寻找解决问题 2 的更好方法。

关于swift - 如何在 Swift 'Share App Extension' 中获取附件的 (NSItemProvider) 文件路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53392888/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com