【问题标题】:Call NSSharingService from FinderSync extension从 FinderSync 扩展调用 NSSharingService
【发布时间】:2021-08-31 12:55:45
【问题描述】:

我正在尝试从我的 FinderSync 扩展发送一封电子邮件(打开默认邮件客户端应用程序)。

        let service = NSSharingService(named: NSSharingService.Name.composeEmail)
        if(service != nil)
        {
            service!.recipients = ["test@gmail.com"]
            service!.subject = "Test Mail"
           if service!.canPerform(withItems: ["Test Mail body"])
           {
                service!.perform(withItems: ["Test Mail body"])
           }
           else
           {
                  //fail for me
          }
        }

在启动主应用程序时从 AppDelegate/ViewController 执行相同的代码,但在从扩展程序调用时不工作。

【问题讨论】:

  • canPerform 的结果是什么?恐怕 NSSharingService 不允许使用 NSExtension 实例(这是来自 dissasembly ShareKit.framework)
  • canPerform 返回失败。我不知道如何检查错误信息。我尝试使用也不会被调用的委托
  • 阅读答案

标签: swift macos nssharingservice


【解决方案1】:

FinderSync 是一个NSExtension,不允许使用NSSharingService

/* @class SHKSharingService (ShareKit.framework) */  

-(char)canPerformWithItems:(NSArray *)items {
    if (([[SHKSharingService class] isShareKitPlugInService] || ([items count] > 0x1388)) {
    return NO;
}

isShareKitPlugInService 定义为

[[NSBundle mainBundle] infoDictionary][@"NSExtension"]

【讨论】:

  • 非常感谢。有没有其他方法可以从 Extension 发起电子邮件。我尝试使用“mailto”选项。但是没有办法用“mailto”附加文件
  • 我认为最好打开新问题。
  • 一个想法可能是编写 xpc 服务(它可能工作)
  • 我通过创建一个单独的应用程序来打开邮件应用程序并使用 NSWorkspace.shared.openApplication 从 FinderSync 调用该新应用程序来完成此操作
猜你喜欢
  • 2023-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-14
  • 2016-01-01
  • 2014-12-09
  • 2015-11-06
  • 1970-01-01
相关资源
最近更新 更多