I know that this original thread is old but I had come across a similar issue and wanted to add my perspective.
My steps to recreate are:
- create a new event with a recurrence rule
- update that event removing the recurrence rule
- update that save event again this time re-adding a recurrence rule
Upon the second update, the recurrence rule was not accepted just as Michael reported. After reading this post, I too found that the event had isDetached set to true.
Per SOP, the event was originally saved with EKSpan.futureEvents as it had a recurrence rule set.
However, also per SOP, the save without the recurrence rule used EKSpan.thisEvent. This is what caused the event to be detached (isDetached = true).
The solution is to save the event with EKSpan.futureEvents even though the update didn't have any recurrence rules.
From there, the standard logic of when to use .thisEvent or .futureEvents still holds.