Diferencia entre el eventIdentifier de EKEvent y el calendarItemExternalIdentifier

Al leer los documentos de Apple, todavía estoy confundido acerca de cuál es la diferencia entre el calendarItemExternalIdentifier de EKCalenderItem y el eventIdentifier de EKEvent , y cuál debemos usar para identificar events del calendar en diferentes dispositivos. Específicamente:

EKCalendarItem calendarItemExternalIdentifier El identificador externo del elemento de calendar proporcionado por el server de calendar. (solo lectura)

y

EKEvent eventIdentifier: un identificador único para el evento. (solo lectura)

EKCalendarItem calendarItemExternalIdentifier se agregó en iOS6, y pensé que este sería el identificador que necesito save para llamar más tarde en el EKEventStore eventWithIdenfier: ya que afirma:

Este identificador le permite acceder al mismo evento o recordatorio en múltiples dispositivos.

Pero en mis propias testings, parece que cuando creo y salvo un nuevo EKEvent, el identificador de evento que obtengo del object EKEvent es único y útil, y el identificador de object externo de calendar que obtengo no parece funcionar con el EKEventStore eventWithIdenfier: con el EKEventStore eventWithIdenfier:

Si alguien tiene una respuesta concluyente, me encantaría saberlo.

calendarItemExternalIdentifier es el identificador global único del RFC 5545 del evento. No es específico de EKEventStore y, de hecho, representa ese evento en todos los dispositivos (así como en otros clientes que no son iOS). Si desea abrir un file adjunto .ics desde su bandeja de input, este valor se mostrará en el campo UID de la invitación.

Dicho esto, no puede search directamente events EKEventStore basados ​​en este identificador. En su lugar, tendrá que hacer una búsqueda de pnetworkingicados en la tienda de events y verificar el calendarItemExternalIdentifier en cada evento.

calendarItemExternalIdentifier se puede search con

 func calendarItemsWithExternalIdentifier(externalIdentifier: String) -> [EKCalendarItem] 

Aunque la disponibilidad está marcada con iOS 6.0, puede ser indocumentada (incluso api privada) hasta hace poco. Lo interesante es que puede recuperar varios artículos, por lo que debería ser posible get todas las ocurrencias de un evento recurrente (aún no probado)

También la documentation de calendarItemExternalIdentifier parece estar actualizada, solo para completar, aquí está:

Este identificador le permite acceder al mismo evento o recordatorio en múltiples dispositivos. Hay algunos casos en los que pueden existir copys duplicadas de un elemento de calendar en la misma database:

Se importó un elemento del calendar de un file ICS en múltiples calendars.

Se creó un evento en un calendar compartido con el usuario y el usuario también fue invitado al evento.

El usuario es un delegado de un calendar que también tiene este evento.

Se agregó un calendar suscrito a varias counts

En tales casos, debe elegir entre elementos del calendar basados ​​en otros factores, como el calendar o la fuente.

Los identificadores de events recurrentes son los mismos para todas las apariciones. Si desea diferenciar entre ocurrencias, puede usar la date de inicio.

Para los serveres Exchange, el identificador es diferente entre iOS y OS X y diferentes entre dispositivos para recordatorios.