EventKit bug: „I screwed up somewhere in date calculation”

Jakiś czas temu pracując nad integracją aplikacji z kalendarzem iOS dotarłem do ciekawego błędu we frameworku EventKit. W logach Xcode dostałem coś takiego:

*** Assertion failure in -[EKEvent _deleteThisOccurrence], /SourceCache/Calendar_Sim/Calendar-1374.0.25/EKEvent.m:2180

A przy logowaniu większej ilości informacji dotarłem do jakże użytecznych informacji:

exception = {
callStack = (
  0 CoreFoundation 0x0000000110a62a75 __exceptionPreprocess + 165
  1 libobjc.A.dylib 0x000000010f3a0bb7 objc_exception_throw + 45
  2 CoreFoundation 0x0000000110a628da +[NSException raise:format:arguments:] + 106
  3 Foundation 0x000000010ddd0b6f -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 195
  4 EventKit 0x000000010bbe8832 -[EKEvent _deleteThisOccurrence] + 1947
  5 EventKit 0x000000010bbe808c -[EKEvent _deleteWithSpan:error:] + 402
  6 EventKit 0x000000010bbe8def -[EKEvent removeWithSpan:error:] + 281
  7 EventKit 0x000000010bbcb599 -[EKEventStore removeEvent:span:commit:error:] + 162
...
  27 libdyld.dylib 0x000000010fe1b145 start + 1
  28 ??? 0x0000000000000001 0x0 + 1
);
  name = NSInternalInconsistencyException;
  reason = "I screwed up somewhere in date calculation";
  userInfo = "";
};

No tak, bardzo mi pomogła ta wiadomość: I screwed up somewhere in date calculation. Zdecydowanie wiem teraz co zrobiłem źle… A tak na serio to mógłby się ten developer ogarnąć i zrobić porządny komunikat błędu. Inna sprawa, że powyższy błąd jest problemem znanym od 2013 roku. Przez 2 wersje iOSa nie potrafili tego ogarnąć.

Problem dotyczy usuwania pojedynczego wystąpienia powtarzalnego zdarzenia z kalendarza.

removeEvent:event span:EKSpanThisEvent commit:YES error:&error

Wrzucam ten wpis, żeby zostawić jakiś ślad w internecie po tym. Jeśli szukasz rozwiązania to go dla Ciebie nie mam. Nie chce podsuwać jakichś workaroundów w stylu usuń całą serię zdarzenia i stwórz 2 inne nie zawierające tego pojedynczego wystąpienia, które trzeba usunąć.

Kilka słów na temat zgłaszania błędów w iOS SDK w bugreport.apple.com

Jak to w świecie oprogramowania jest: błędy w oprogramowaniu były, są i będą. Wszędzie. Nawet taki Apple – wielka firma z olbrzymimi środkami – boryka się z prozaicznymi rzeczami typu bug w aplikacji lub SDK. Nie dawno znalazłem pewien problem we frameworku EventKit.

Czytaj dalej Kilka słów na temat zgłaszania błędów w iOS SDK w bugreport.apple.com