I am trying to request access to calendars in a SwiftUI MacOS app but it immediately denies it.
Below is some testable code highlighting what I want to achieve. Many thanks.
In my previous experience with requesting private information on MacOS a notification should appear instead of the popUp on iOS.
I'm still trying to figure out EventKit for SwiftUI so please excuse any mistakes.
struct ContentView: View {
let eventStore = EKEventStore()
var body: some View {
Text("Test")
.onAppear{
checkCalendarAuthorizationStatus()
}
}
func checkCalendarAuthorizationStatus() {
switch EKEventStore.authorizationStatus(for: .event) {
case .authorized:
insertEvent(store: eventStore)
case .denied:
print("Access denied")
case .notDetermined:
// 3
eventStore.requestAccess(to: .event, completion:
{(granted: Bool, error: Error?) -> Void in
if granted {
self.insertEvent(store: eventStore)
} else {
print("Access denied")
}
})
default:
print("Case default")
}
}
func insertEvent(store: EKEventStore) {
// 1
let calendars = store.calendars(for: .event)
for calendar in calendars {
// 2
if calendar.title == "Calendar" {
// 3
let startDate = Date()
// 2 hours
let endDate = startDate.addingTimeInterval(2 * 60 * 60)
// 4
let event = EKEvent(eventStore: store)
event.calendar = calendar
event.title = "New Meeting"
event.startDate = startDate
event.endDate = endDate
// 5
do {
try store.save(event, span: .thisEvent)
}
catch {
print("Error saving event in calendar") }
}
}
}
}