Topics

#96: EventKit Basics 📅

Topics

EventKit is how we access and interact with a user's calendars and events. It has APIs to manage events, reminders, alarms and even participants. Today we'll take a look at the basics. Let's get started.

Authorization

Before doing anything fun, we'll need to check the current authorization status, then request permission if needed.

switch EKEventStore.authorizationStatusForEntityType(.Event) {
case .Authorized:
  fetchCalendars()
case .NotDetermined:
  requestAccessToCalendars()
case .Restricted, .Denied:
  showAccessDeniedAlert()
}

To do anything interesting, we'll need an EKEventStore.

let eventStore = EKEventStore()

Apple suggests we keep a long-lived instance around, so we'll keep ours in a property. Now we can write our function:

eventStore.requestAccessToEntityType(.Event) { (granted, error) in
  guard granted else { return }
  self.fetchCalendars()
}

Fetching Calendars & Events

let calendars = eventStore.calendarsForEntityType(.Event)

Lastly, we'll use the handy function to put new events where the user expects:

We'll use Timepiece (Bite #3) to help us compose dates. Then we'll create a predicate to look for events in the last week, across all the user's calendars.

Adding an Event

let event = EKEvent(eventStore: eventStore)

event.title = "Drop off Carbonite Shipment"
event.startDate = "3031-02-15".dateFromFormat("yyyy-MM-dd")
event.calendar = eventStore.defaultCalendarForNewEvents

try eventStore.saveEvent(event, span: .ThisEvent)

Similar Bites