Невозможно вставить COPY_SEND при программном вызове VC в расширении содержимого уведомлений

После создания расширения содержимого уведомлений, а затем удаления NSExtensionMainStoryboard и замены его на NSExtensionPrincipalClass в файле info.plist и соответствующего вызова module.viewController, а затем отладки расширения я вижу следующую ошибку?

NotificationExtension[58062:21665141] [Общий] _BSMachError: порт 5c03; (os/kern) недопустимая возможность (0x14) «Невозможно вставить 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, вызывая раскадровку, но удаляете метку, вы получите ту же ошибку!

заранее спасибо.


person Crash1hd    schedule 13.10.2018    source источник


Ответы (1)


Вам нужно позвонить startAccessingSecurityScopedResource() по URL-адресу вложения (в 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()
        }
    }
}
person grebulon    schedule 10.12.2018