Случайная синхронизация EKEventStore c проблемы с календарем Google - PullRequest
0 голосов
/ 05 августа 2020

Я потратил часы на отслеживание этой ошибки.

Мое приложение должно удалить некоторые события, а затем добавить некоторые другие события. Это отлично работает с iCloud и локальными календарями. Однако с календарями Google это меняется.

То, что я заметил до сих пор:

  • Иногда все работает отлично. Все события, которые следует удалить, удаляются, а все события, которые следует добавить, добавляются.
  • Иногда кажется, что сначала все синхронизируется правильно, но через 2 минуты события удаляются.
  • .remove работает лучше (95%), чем .save (50-80%).
  • ошибок перехвата нет. Ни для .remove, ни для .save.

Кажется (?!), Что календари Google с небольшим количеством событий (внутри или вне предиката - не имеет значения) синхронизируются правильно. Календари Google с множеством событий (внутри или вне предиката) вызывают упомянутые проблемы с синхронизацией c.

Здесь фрагменты кода (на самом деле ничего особенного!):

let evenStore = EventStore()
let predicate = eventStore.predicateForEvents(withStart: predicateStartDate!,
                                              end: predicateEndDate!,
                                              calendars: selectedCalendarArray)
let events = eventStore.events(matching: predicate)
for event in events {
    do {
        try eventStore.remove(event, span: .thisEvent, commit: false)
    } catch {
        print("event remove catch error")
    }
}

... (новые события создаются и сохраняются в eventsSave)

for event in eventsSave {
    do {
        try eventStore.save(event, span: .thisEvent, commit: false)
    } catch {
        print("event save catch error")
    }
}

do {
    try eventStore.commit()
} catch {
    print("commit catch error")
}

Я пытался избежать пакетного .remove или .save (true iso false - нет commit()), безуспешно . Я добавил eventStore.reset(). Безуспешно. Я добавил eventStore.refreshSourcesIfNecesary(). Безуспешно.

Чего я действительно не понимаю, так это того, что iCloud работает на 100%. Календарь Google также является облачным календарем. Что заставляет его вести себя так иначе? Есть несколько сообщений о SO, но в основном они относятся к 2013-2016 гг. После этого уже практически ничего. Также никогда не было никакого решения solid, в лучшем случае некоторые обходные пути. Отсутствуют EKEvents при сохранении нескольких событий календаря Google Пакетное сохранение EKEvents в календаре Google, вызывающее потерю случайных событий

У меня сложилось впечатление, что что-то базовое c и очень простое просто отсутствует, но я не знаю, что это может быть ...

Любая помощь будет принята с благодарностью!

*** ОБНОВЛЕНИЕ (06.08.2020) ***

Некоторые события имеют географическое местоположение с помощью свойства X-APPLE-STRUCTURED-LOCATION. Эти события вызывают .save.

Error Domain=EKErrorDomain Code=19 "Locations with geo information are not supported by this account." UserInfo={NSLocalizedDescription=Locations with geo information are not supported by this account.}

Может ли эта ошибка быть связана с проблемой синхронизации темы c?

...