在通知内容扩展中以编程方式调用 VC 时无法插入 COPY_SEND

Unable to insert COPY_SEND when programatically calling VC in Notification Content Extension

创建通知内容扩展然后删除 NSExtensionMainStoryboard 并将其替换为 info.plist 文件中的 NSExtensionPrincipalClass 并适当地调用 module.viewController 然后调试扩展我看到以下错误吗?

NotificationExtension[58062:21665141] [常见] _BSMachError: port 5c03; (os/kern) 无效能力 (0x14) "Unable to insert COPY_SEND"

下面是 NotificationExtensionViewControllerCode

import UIKit
import UserNotifications
import UserNotificationsUI

class NotificationViewController: UIViewController, UNNotificationContentExtension {

    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any required interface initialization here.
    }

    func didReceive(_ notification: UNNotification) {

    }

}

是什么导致了错误,我该如何解决?

如果您执行上述操作但使用 NSExtensionMainStoryboard 调用情节提要但删除标签,您会得到同样的错误!

提前致谢。

您需要在附件 url 上调用 startAccessingSecurityScopedResource()(在 didReceive 中)。 Apple 的一些天才决定通知扩展只访问 通知存储 中的文件是危险的。当然,它有据可查(不是!)

if let attachment = notification.request.content.attachments.first {
    if attachment.url.startAccessingSecurityScopedResource() {
        if let data = NSData(contentsOfFile: attachment.url.path) as? Data {
            self.uiImage.image = UIImage(data: data) // <- that's the image view
            attachment.url.stopAccessingSecurityScopedResource()
        }
    }
}