EventKit Alarms are how we configure notifications and alerts that will be triggered to remind the user about calendar events or reminders.
Like in Bite #96, we'll use Timepiece (Bite #3) to help us compose dates. We'll create an event for when our cookies will be done baking. The event will start in 12 minutes, and we'll add a new EKAlarm to it that triggers 5 seconds before the event. Alarms can be created with at absolute or relative times.
let e = EKEvent(eventStore: eventStore)
e.startDate = NSDate() + 12.minutes
e.endDate = e.startDate + 30.seconds
e.calendar = eventStore.defaultCalendarForNewEvents
e.title = "Cookies are Done! πͺ"
e.addAlarm(EKAlarm(relativeOffset: -5.0))
try eventStore.saveEvent(e, span: .ThisEvent)
Interestingly, OS X is actually ahead of iOS here. EKAlarm on OS X **has more **properties for configuring a sound to play, an email address to notify and more.
Now when we get to Disneyland, the alarm will remind us to head over to . (Just an example, in real life we'd never need the reminder).
Things get more fun when adding alarms to reminders. Let's finish by adding an alarm to a new reminder that triggers when the user arrives somewhere:
let reminder = EKReminder(eventStore: eventStore)
reminder.title = "Ride Star Toursβ
reminder.calendar = eventStore.defaultCalendarForNewReminders()
let location = EKStructuredLocation(title: "Disneyland")
location.geoLocation = CLLocation(
latitude: 33.8120918, longitude: -117.9189742
)
let alarm = EKAlarm()
alarm.structuredLocation = location
alarm.proximity = .Enter
reminder.addAlarm(alarm)
try eventStore.saveReminder(reminder, commit: true)