如何使用 EKEventViewController 在我的应用程序中显示 EKEvent 邀请的详细信息?

How can I display the details of a EKEvent invitation within my app using EKEventViewController?

简要总结

我希望我的应用程序的用户能够accept/decline他们日历的活动邀请。 为此,我尝试使用 EventKitUI 组件启动事件,并允许用户在不离开我的应用程序的情况下更新事件。 问题是每当我将 EKEvent 分配给 EKEventViewController 时它就会崩溃

详细说明

我想要什么:

要显示与本机 iOS 日历中的视图类似的视图,因此它应该如下所示:

我有什么:

import UIKit
import EventKitUI

class CalendarViewController: UIViewController, EKEventViewDelegate, EKEventEditViewDelegate {

   var meetingID = "id"

   override func viewDidLoad() {
       super.viewDidLoad()
       //self.showEditEvent(meeting: meetingID)
       self.showInvite(meeting: meetingID)
   }

   func showInvite(meeting: Meeting){
        let evc = EKEventViewController()
        var event = EKEvent(eventStore: MeetingsFetcher.eventStoreClass)
        event = MeetingsFetcher.eventStoreClass.event(withIdentifier: meetingID)!
        evc.delegate = self 
        evc.event = event
        evc.allowsEditing = true
        evc.allowsCalendarPreview = true
        self.screen.present(evc, animated: true, completion: nil)
    }

    func eventViewController(_ controller: EKEventViewController, didCompleteWith action: EKEventViewAction) {
        controller.dismiss(animated: true, completion: nil)
    }
}

大问题: 每当我将 EKEvent 分配给 evc.event 时,它都会因为隐私侵犯问题而崩溃。请注意,我确实有权访问日历。

CRASHING DUE TO PRIVACY VIOLATION

evc.event = event

旁注

虽然使用 EKEventEditViewController() 打开会议的编辑视图确实有效,这证明了这一点。

所以这段代码有效,但它不是我正在寻找的视图:

    func showEditEvent(meeting: Meeting){
        let evc = EKEventEditViewController()
        evc.eventStore = MeetingsFetcher.eventStoreClass
        var event = EKEvent(eventStore: MeetingsFetcher.eventStoreClass)
        event = MeetingsFetcher.eventStoreClass.event(withIdentifier: meeting.UUID!)!
        evc.event = event
        evc.editViewDelegate = self
        self.screen.present(evc, animated: true, completion: nil)
    }

    func eventEditViewController(_ controller: EKEventEditViewController, didCompleteWith action: EKEventEditViewAction) {
        controller.dismiss(animated: true, completion: nil)
    }

我终于解决了。看起来除了日历权限外,我还需要添加到 info.plist 联系人权限中。

Privacy - Contacts Usage Description