<!--
{
  "documentType" : "article",
  "framework" : "EventKit",
  "identifier" : "/documentation/EventKit/creating-events-and-reminders",
  "metadataVersion" : "0.1.0",
  "role" : "article",
  "title" : "Creating events and reminders"
}
-->

# Creating events and reminders

Create and modify events and reminders in a person’s database.

## Discussion

Once you have permission to access a person’s Calendar and Reminder data, you can create, display, and edit events and reminders.

### Create Events

Create a new event with the [`init(eventStore:)`](/documentation/EventKit/EKEvent/init(eventStore:)) method of the [`EKEvent`](/documentation/EventKit/EKEvent) class.

You can edit the details of a new event or an event you previously fetched from the Calendar database by setting the event’s corresponding properties. Some of the details you can edit include:

- The event’s title with the ``doc://com.apple.eventkit/documentation/EventKit/EKCalendar/title`` property.
- The event’s start and end dates with the ``doc://com.apple.eventkit/documentation/EventKit/EKEvent/startDate`` and ``doc://com.apple.eventkit/documentation/EventKit/EKEvent/endDate`` properties.
- The calendar with which the event is associated with the ``doc://com.apple.eventkit/documentation/EventKit/EKCalendarItem/calendar`` property.
- The alarms associated with the event with the ``doc://com.apple.eventkit/documentation/EventKit/EKCalendarItem/alarms`` property (see “<doc://com.apple.eventkit/documentation/EventKit/setting-an-alarm>” for more details).
- The event’s recurrence rule, if it is a repeating event, with the `recurrenceRules` property (see “<doc://com.apple.eventkit/documentation/EventKit/creating-a-recurring-event>” for more details).

> Note:
> In iOS, you have the option of letting users modify event data with the event view controllers provided in the EventKit UI framework. For information on how to use these event view controllers, see <doc://com.apple.documentation/documentation/EventKitUI>.

#### Save and Delete Events

> Important:
> If your app modifies a user’s Calendar database, it must get confirmation from the user before doing so. An app should never modify the Calendar database without specific instruction from the user.

Save your changes to the Calendar database with the [`EKEventStore`](/documentation/EventKit/EKEventStore) method [`save(_:span:commit:)`](/documentation/EventKit/EKEventStore/save(_:span:commit:)). If you want to remove an event from the Calendar database, use the `EKEventStore` method [`remove(_:span:commit:)`](/documentation/EventKit/EKEventStore/remove(_:span:commit:)). Whether you are saving or removing an event, implementing the respective method automatically syncs your changes with the calendar the event belongs to (CalDAV, Exchange, and so on).

If you are saving a recurring event, your changes can apply to all future occurrences of the event by specifying [`EKSpan.futureEvents`](/documentation/EventKit/EKSpan/futureEvents) for the span parameter of the [`save(_:span:commit:)`](/documentation/EventKit/EKEventStore/save(_:span:commit:)) method. Likewise, you can remove all future occurrences of an event by specifying [`EKSpan.futureEvents`](/documentation/EventKit/EKSpan/futureEvents) for the `span` parameter of the [`remove(_:span:commit:)`](/documentation/EventKit/EKEventStore/remove(_:span:commit:)) method.

> Note:
> If you pass `NO` to the `commit` parameter, make sure that you later invoke the ``doc://com.apple.eventkit/documentation/EventKit/EKEventStore/commit()`` method to permanently save your changes.

### Create Reminders

Reminders are tasks that may be tied to a specific time or location. They are similar to calendar events, but can be marked complete and may not necessarily span an exact period of time.

Because [`EKReminder`](/documentation/EventKit/EKReminder) inherits from [`EKCalendarItem`](/documentation/EventKit/EKCalendarItem), you can perform the same methods on a reminder as you would on an event, such as adding an alarm with [`addAlarm(_:)`](/documentation/EventKit/EKCalendarItem/addAlarm(_:)) or setting a recurrence rule with [`addRecurrenceRule(_:)`](/documentation/EventKit/EKCalendarItem/addRecurrenceRule(_:)).

> Important:
> If your iOS app links on macOS and you need to access Reminders data, be sure to include the [NSRemindersUsageDescription](https://developer.apple.com/library/content/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html#//apple_ref/doc/uid/TP40009251-SW16) key in your `Info.plist` file.

You can create reminders using the [`init(eventStore:)`](/documentation/EventKit/EKReminder/init(eventStore:)) class method. The [`title`](/documentation/EventKit/EKCalendarItem/title) and [`calendar`](/documentation/EventKit/EKCalendarItem/calendar) properties are required. The calendar for a reminder is the list with which it is grouped.

Like events, reminders can trigger time-based or location-based alarms to alert the user of a certain task. Read “`Setting an Alarm`” for more information on how to attach alarms to calendar items.

#### Save and Delete Reminders

To save a reminder to the Calendar database, call the [`save(_:commit:)`](/documentation/EventKit/EKEventStore/save(_:commit:)) method. To remove an event, call the [`remove(_:commit:)`](/documentation/EventKit/EKEventStore/remove(_:commit:)) method. The [`title`](/documentation/EventKit/EKCalendar/title) and [`calendars`](/documentation/EventKit/EKEventStore/calendars) properties must explicitly be set before you save the reminder.

> Note:
> Just like when saving or removing events, make sure that if you pass `NO` to the `commit` parameter, you later invoke the ``doc://com.apple.eventkit/documentation/EventKit/EKEventStore/commit()`` method to save your changes.

#### Edit Reminders

To associate a start date or due date with a reminder, use the [`startDateComponents`](/documentation/EventKit/EKReminder/startDateComponents) and [`dueDateComponents`](/documentation/EventKit/EKReminder/dueDateComponents) properties. To complete a reminder, set the completed property to `YES`, which automatically sets [`completionDate`](/documentation/EventKit/EKReminder/completionDate) to the current date.

> Important:
> If your app modifies a user’s Calendar database, it must get confirmation from the user before doing so. An app should never modify the Calendar database without specific instruction from the user.

---

Copyright &copy; 2026 Apple Inc. All rights reserved. | [Terms of Use](https://www.apple.com/legal/internet-services/terms/site.html) | [Privacy Policy](https://www.apple.com/privacy/privacy-policy)
