device_calendar_plus_ios
iOS implementation of the device_calendar_plus plugin.
0.7.0
7.6K downloads/mo
#3303 most downloaded on pub.dev
bullet-to/device_calendar_plus
What this package is like to depend on
Last release 2 months ago
17 Jun 2026
Ships fairly regularly
a new release about every 6 weeks
Nearly every release is documented
notes for 15 of 15 stable releases
Nothing withdrawn
no release was ever pulled
9 months old
15 releases · first in 2025
15 releases in the last 12 months
see the full history below
Release timeline
15 releases · Nov 2025 to Jun 2026Releases
latest 15-
0.7.017 Jun 2026Release notes
Open source →Feature release. App-facing API is additive;
device_calendar_plus_platform_interfacehas breaking signature changes for platform implementers.Added
- Write-only access —
requestPermissions(level: CalendarAccessLevel.writeOnly)for the gentler add-only prompt (#89). - Automatic permissions —
DeviceCalendar.instance.autoPermissions = AutoPermissionMode.asNeeded | .full; methods request access on first use (#90). - Optional
calendarId— omit it oncreateEventto write to the default calendar (#88). - Event reminders —
reminders: List<Duration>on create,Patch<List<Duration>>on update,Event.remindersread back; minute-granular relative offsets (#87).
Fixed
- Android: honest
permissionDenied(not "no writable calendar") when a default can't be resolved (#112); tighter denial reporting (#108). - Docs: iOS write-only re-prompts and upgrades in-app (#109).
All four packages bumped 0.6.0 → 0.7.0 in lockstep.
Release notes
Open source →Added
- Write-only access via
requestWriteOnlyAccessToEvents(iOS 17+). It is not a permanent ceiling — a later full request re-prompts and upgrades the app in-app (#89). createEventwith nocalendarIdwrites todefaultCalendarForNewEvents(#88).- Event reminders via
EKAlarm(relativeOffset:)onEKEvent.alarms(#87).
Changed
- Simplified the permission request into a single iOS 17 availability dispatch (#108).
- Write-only access —
-
0.6.016 Jun 2026Release notes
Open source →Changed
- Breaking:
updateRecurringtakes the anchored occurrence's new start (newStartMillis) instead ofstartMinuteOfDay.shiftStarttranslates the series anchor by the wall-clock delta (calendar-day count + time-of-day) in the event'sEKEvent.timeZone, so a move can change the day and time together and stays correct across DST (#103).
Behaviour
updateRecurringrejects astartthat moves the day of a series whoseEKRecurrenceRulepins it (daysOfTheWeek/daysOfTheMonth/monthsOfTheYear) unless a new rule is also supplied (dayMoveConflictsWithRule).
- Breaking:
-
0.5.215 Jun 2026Release notes
Open source →Fixed
- EventKit reads and writes now run on a background serial queue instead of the main thread, so operations on large calendars no longer stall the UI (#79)
listEventsover a span longer than EventKit's ~4-year predicate limit now chunks the query into windows and de-duplicates recurring instances across window boundaries, so long ranges return every event exactly once, sorted (#94)createCalendarnow fails with a clear error on sources that can't hold calendars (e.g. subscribed/holiday sources) instead of an opaque EventKit failure (#96)updateRecurring(thisAndFollowing, recurrenceRule: Patch.clear())now splits the series — truncating the master before the occurrence and detaching a standalone non-recurring event at the split point — instead of collapsing the whole series into a single event. Matches Android's behavior (#93)
-
0.5.115 Jun 2026Release notes
Open source →- iOS: fix showEventModal(edit: true) crash (#77)
- Docs: clarify showEventModal view modal is not read-only
Release notes
Open source →Fixed
showEventModal(edit: true)no longer crashes withNSInvalidArgumentException("Pushing a navigation controller is not supported").EKEventEditViewControlleris aUINavigationControllersubclass and is now presented directly instead of being wrapped in another navigation controller (#77)
-
0.5.011 Jun 2026Release notes
Open source →Changed
- Breaking: recurring-edit split —
updateRecurring/deleteRecurringaccept onlyallEventsandthisAndFollowing(bothEKSpan.futureEvents); single occurrences go throughupdateEvent/deleteEventwith an occurrence timestamp (EKSpan.thisEvent) updateRecurringtime changes preserve each occurrence's date, replacing only the time-of-day components
Fixed
- Occurrence edits validate before mutating the live
EKEvent; an edit whosestartDatepasses the occurrence's untouched end now fails withinvalidArguments(matching Android) instead of saving an inverted event
- Breaking: recurring-edit split —
-
0.4.025 May 2026Release notes
Open source →Added
updateRecurring()— series-level recurring-event edits withEventSpan(allEvents / thisAndFollowing / thisInstance), backed byEKSpan.futureEventsandEKSpan.thisEventdeleteRecurring()— sameEventSpansemantics onEKEventStore.removeurlfield on events viaEKEvent.urlPatch<T>support inupdateEvent()— null leaves a field unchanged,Patch.setwrites,Patch.clearnils the field on theEKEventeditflag onshowEvent()— presentsEKEventEditViewControllerinstead ofEKEventViewController
-
0.3.520 Apr 2026Release notes
Open source →Fixed
- Calendar source lookup fallback when default source is unavailable (#13)
createCalendardefault fallback prefers iCloud over other CalDAV sources (#33)
-
0.3.408 Feb 2026Release notes
Open source →Added
- Swift Package Manager support (CocoaPods continues to work as before)
-
0.3.321 Dec 2025Release notes
Open source →Fixed
- Fixed parsing of
instanceIdfor events with@in their event ID (e.g., Google Calendar IDs like[email protected])
- Fixed parsing of
-
0.3.219 Dec 2025Release notes
Open source →Changed
createCalendar()signature updated to accept optionalplatformOptionsparameter (ignored on iOS)
-
0.3.107 Nov 2025Release notes
Open source →Fixed
showEvent()now properly stores result callback and calls it ineventViewController(_:didCompleteWith:)delegate method after modal is dismissed
-
0.3.005 Nov 2025Release notes
Open source →Changed
- BREAKING:
deleteEvent()now always deletes entire series for recurring events usingEKSpan.futureEventson master event (removeddeleteAllInstancesparameter) - BREAKING:
updateEvent()now always updates entire series for recurring events usingEKSpan.futureEventson master event (removedupdateAllInstancesparameter) - Native code now extracts event ID from instance ID format automatically and fetches master event
Removed
- BREAKING:
NOT_SUPPORTEDerror code (no longer needed)
- BREAKING:
-
0.2.005 Nov 2025Release notes
Open source →Added
openAppSettings()implementation using UIApplication.openSettingsURLString
Removed
- BREAKING:
getPlatformVersion()implementation (unused boilerplate)
-
0.1.104 Nov 2025 -
0.1.004 Nov 2025