¿Cómo ordenar los contactos por fecha de creación o fecha de modificación en iOS Contacts o OS X Contacts 7.x?

¿Hay alguna forma de ver o exportar la fecha en que se creó o modificó un contacto en iOS 7 y/o la aplicación Contactos (versión 7.1) cuando se ve desde una Mac?

Este punto de datos ayudaría enormemente a la deduplicación y sincronización, incluso de una manera más manual.

Respuestas (5)

Después de cavar un poco en Contacts' DB esto es lo que encontré.

Como ya dijo @grgarside, el DB está en

~/Library/Application\ Support/Address\ Book/Sources/<source-ID>/AddressBook-v22.abcddb

¿Dónde <source-ID>está probablemente el directorio modificado más reciente?

AddressBook-v22.abcddbes un archivo SQLite DB con 24 tablas (en mi caso). El más importante es ZABCDRECORDel que contiene (entre otros) el nombre, el apellido y la fecha de creación del contacto (pero también de modificación, etc.).

Las 2 columnas interesantes en su caso son:

  • ZCREATIONDATE
  • ZMODIFICATIONDATE

Como descubrí recientemente , la fecha base para estas 2 columnas es 01-01-2001. Las columnas ZMODIFICATIONDATEYEARLESSy ZCREATIONDATEYEARLESSutilizan el 1 de enero del año de creación como fecha base.

Usando sqlitepuedes ordenarlo así:

sqlite3 AddressBook-v22.abcddb "select ZFirstName, ZLastName from ZABCDRECORD order by ZMODIFICATIONDATE"

Mostrará FirstName/LastName ordenados por fecha de modificación.

Interesante, no tengo estas columnas...?
sqlite3 AddressBook-v22.abcddb "PRAGMA table_info(ZABCDRECORD);" | grep ZMODIFICATIONDATE¿Nada con este comando? (Obtengo 63 columnas con PRAGMA table_info(ZABCDRECORD);)
Ejecuté ese comando, no hubo salida...
Interesante, solo para tu información, estoy usando Contacts 8.0. (compilación 1365)
@grgarside igualmente.

La base de datos de contactos se almacena en una sola base de datos SQLite3. Puedes encontrar el tuyo aquí…

~/Library/Application\ Support/AddressBook/Sources/<source-ID>/AddressBook-v22.abcddb

Esto se puede exportar usando

sqlite3 AddressBook-v22.abcddb .dump > ~/Desktop/export

Dado que el resultado es un solo archivo y las fechas creadas/modificadas no parecen estar almacenadas en mi base de datos, la única forma de ordenar por fecha es comparando varias versiones del archivo.

Puede usar Time Machine para obtener versiones anteriores del archivo y FileMerge (una herramienta de desarrollo) u otra herramienta de comparación como Kaleidoscope para comparar el resultado.

Si desea buscar en su base de datos de iOS, haga jailbreak o sincronice sus contactos con su Mac.

Esto podría necesitar una combinación de personas de Stack Overflow que asimilan el funcionamiento interno de las migraciones de Core Data y cambian los registros junto con los archivos viables para ensamblar algún tipo de historial. Gran servicio de apertura aquí, pero realmente no puedo ver cómo funcionaría esto, incluso si quisieras hacer volcados periódicos mientras realizas grandes cambios...
Tal vez más SuperUser que Stack Overflow en mi humilde opinión.

Agregando a las respuestas aquí (todavía no sé cómo agregar un enlace a un comentario): si desea hacer esto una vez, entonces los scripts de Shell serían suficientes. Si desea hacerlo de forma continua, puede pensar en usar un producto: uso SQLiteManager , pero es costoso, excepto cuando está en oferta. Hay varios administradores de SQLite gratuitos y basados ​​en la web. Estas aplicaciones (como SQLManager) deberían tener la capacidad de ordenar por cualquier columna. Encuentro esto muy útil, no solo para contactos, sino para cualquier base de datos SQLite. Aquí hay un ejemplo de una extensión SQLite Firefox.

Como referencia, si desea ver las bases de datos SQLite que usan las aplicaciones, busque la aplicación en Finder (~/Music/iTunes/Mobile \ Applications, cópiela en su escritorio. Cambie el sufijo a zip y haga doble clic. Tenga cuidado. Control-clic en el archivo .app, y si al desarrollador no le importó, el archivo sqlite estará en el nivel superior Utilizo esta función para probar mis aplicaciones cuando se activan o cuando cambia el sistema operativo.

Si elige quedarse con las secuencias de comandos, tal vez alguien más pueda proporcionar los detalles, pero creo que podría crear una secuencia de comandos que no solo copie los contactos, sugiero, solo lectura, sino que luego los pegue en Números o equivalente. Entonces, también tendría la capacidad de ordenar por columna.

Si solo desea una forma rápida de ver los contactos ordenados por fecha de creación, hay algunas aplicaciones que lo hacen. Por ejemplo, https://itunes.apple.com/tc/app/recent-contacts/id541831736?mt=8 .

Pruebe algo así si desea ordenar por fecha de creación y ver la fecha:

  1. terminal abierta
  2. Vaya a AddressBook-v22.abcddb
  3. Sqlite3 AddressBook-v22.abcddb "seleccione fecha y hora (ZCREATIONDATE, 'unixepoch'), ZFirstName, ZLastName de ZABCDRECORD pedido por ZCREATIONDATE"