Comportamiento extraño con iOS kABPersonModificationDateProperty, parece actualizarse todo el time

Estoy viendo un comportamiento realmente extraño en mi aplicación de iOS usando la biblioteca ABAddressBook. Me pregunto si alguien puede darme una idea de lo que está sucediendo en segundo plano o si tengo un error lógico que simplemente no puedo ver.

Breve historia corta Estoy haciendo una aplicación de VOIP que depende en gran medida de la import de los contactos del usuario. Mantengo una copy de security en línea de estos que también se utilizan junto con las notifications push.

A medida que se modifican en el teléfono, necesito enviar una request de actualización al server para mantenerlos precisos. El problema es que muchos dispositivos de usuario suelen enviar spam al server con bloques de contactos muy grandes, a intervalos aleatorios. Un día serán más de 50 contactos, 5 minutos más tarde otros 10, luego será un mes antes de que se actualice uno solo. Le he preguntado a algunos usuarios que son amigos y no pueden recordar la modificación de la mitad de su libreta de direcciones durante la noche.

Mi código es muy simple, NSDate un NSDate cada vez que tengo la obligación de enviar una actualización al server, por ejemplo, adición, modificación o eliminación. Sé que hay una callback que se activa cuando la libreta de direcciones se ha actualizado, pero esto requiere mantener una reference a la libreta de direcciones en la memory en todo momento. He hecho algunas testings y si la aplicación falla o el usuario mata la aplicación, pierdo las actualizaciones. Teniendo en count que existe una aplicación VOIP que funciona en segundo plano, creo que es posible que la gente lo mate en una ocasión para ahorrar batería o lo que sea. Entonces, por ese motivo, kABPersonModificationDateProperty todos los contactos que comtestingn la propiedad kABPersonModificationDateProperty contra el último NSDate que he grabado. Si la modificación es más reciente, comencé mi actualización, así.

 NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setTimeStyle:NSDateFormatterMediumStyle]; [dateFormatter setDateStyle:NSDateFormatterMediumStyle]; NSDate *lastChecked = [dateFormatter dateFromString:[PListData readStringFromFile:@"lastContactsArchive"]]; CFDateRef modifyDate = ABRecordCopyValue(ref, kABPersonModificationDateProperty); ... ... else if ([(__bridge NSDate*)modifyDate compare:lastChecked]==NSOrdenetworkingDescending) // if modified after last check, create new contact and update { ... } 

¿Hay algo que me falta, es la date de modificación solo actualizada cuando se cambian el nombre, los numbers de teléfono, el correo electrónico, etc.? ¿Se modifican cuando sincroniza iCloud, por ejemplo? ¿Es un contador actualizado si llaman a la persona por teléfono? etc

He intentado depurar 3 teléfonos y todos se comportan como era de esperar. Realmente estoy dibujando un espacio aquí y el server no está contento conmigo, así que cualquier ayuda sería apreciada.

Los contactos también pueden actualizarse en segundo plano cuando iphone sincroniza los contactos con iCloud / CardDav / Gmail / Exchange.

Tenga en count que también puede suceder mientras su aplicación se está ejecutando, por lo que debe suscribirse para las actualizaciones de la libreta de direcciones.