I would be interested in knowing how to add a calendar event in the device, but using swift. I know there are some examples made in Objective-C, but at the moment nothing in swift. Many thanks.
event, completion: { (granted, error) in if (granted) && (error == nil) { let event = EKEvent(eventStore: eventStore) event. title = title event. startDate = startDate event. endDate = endDate event.
Note: If your app is crashing with This app has crashed because it attempted to access privacy-sensitive data without a usage description. The app's Info.plist must contain an NSCalendarsUsageDescription key with a string value explaining to the user how the app uses this data.
, you'll need to add NSCalendarsUsageDescription
to your info.plist. Can follow the example here.
Swift 5.0 Version
import Foundation import EventKit let eventStore : EKEventStore = EKEventStore() // 'EKEntityTypeReminder' or 'EKEntityTypeEvent' eventStore.requestAccess(to: .event) { (granted, error) in if (granted) && (error == nil) { print("granted \(granted)") print("error \(error)") let event:EKEvent = EKEvent(eventStore: eventStore) event.title = "Test Title" event.startDate = Date() event.endDate = Date() event.notes = "This is a note" event.calendar = eventStore.defaultCalendarForNewEvents do { try eventStore.save(event, span: .thisEvent) } catch let error as NSError { print("failed to save event with error : \(error)") } print("Saved Event") } else{ print("failed to save event with error : \(error) or access not granted") } }
Reference : https://gist.github.com/mchirico/d072c4e38bda61040f91
Swift 3.0 compatible:
func addEventToCalendar(title: String, description: String?, startDate: Date, endDate: Date, completion: ((_ success: Bool, _ error: NSError?) -> Void)? = nil) { let eventStore = EKEventStore() eventStore.requestAccess(to: .event, completion: { (granted, error) in if (granted) && (error == nil) { let event = EKEvent(eventStore: eventStore) event.title = title event.startDate = startDate event.endDate = endDate event.notes = description event.calendar = eventStore.defaultCalendarForNewEvents do { try eventStore.save(event, span: .thisEvent) } catch let e as NSError { completion?(false, e) return } completion?(true, nil) } else { completion?(false, error as NSError?) } }) }
And also import EventKit
So you can easily call this method from everywhere:
addEventToCalendar(title: "Girlfriend birthday", description: "Remember or die!", startDate: NSDate(), endDate: NSDate())
If you prefer, you can put this method inside an utiliy class and define it as 'static'.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With