Even i faced duplicate events issue, while adding events to the calendar. So before adding the events, i removed them first by passing start and end date in predicate as below.
func removeMobileCalendarEvents(){
//lstEvents is response array which i got from web service and stored in model class
for eventObj in lstEvents.list {
let predicate = eventStore.predicateForEvents(withStart: eventStartDate, end: eventEndDate, calendars: nil)
let events = eventStore.events(matching: predicate)
for event in events {
print("event title",event.title)
print("event start date",event.startDate)
print("event end date",event.endDate)
//lstEvents is response array which i got from web service and stored in model class
for eventObj in lstEvents.list {
if event.title! == eventObj.EventName {
//exists
do {
try eventStore.remove(event, span: .thisEvent, commit: true)
}
catch {
print("Error saving event in calendar") }
}else{
//not exists
}
}
}
}
addingEventsToMobileCalendar()
}
Call removeMobileCalendarEvents() method once you receive response from web service. Call removeMobileCalendarEvents() method, those many times the api is getting called.