Agregar datos vCard directamente a la libreta de direcciones del sistema

Estoy diseñando un lector de códigos QR, y necesita detectar e importar tarjetas de contacto en formatting vCard (.vcf).

¿Hay alguna forma de agregar los datos de la tarjeta directamente a la Libreta de direcciones del sistema, o tengo que analizar la vCard yo mismo y agregar cada campo individualmente?

Si se ejecuta en iOS 5 o posterior, este código debería funcionar:

 #import <AddressBook/AddressBook.h> // This gets the vCard data from a file in the app bundle called vCard.vcf //NSURL *vCardURL = [[NSBundle bundleForClass:self.class] URLForResource:@"vCard" withExtension:@"vcf"]; //CFDataRef vCardData = (CFDataRef)[NSData dataWithContentsOfURL:vCardURL]; // This version simply uses a string. I'm assuming you'll get that from somewhere else. NSString *vCardString = @"vCardDataHere"; // This line converts the string to a CFData object using a simple cast, which doesn't work under ARC CFDataRef vCardData = (CFDataRef)[vCardString dataUsingEncoding:NSUTF8StringEncoding]; // If you're using ARC, use this line instead: //CFDataRef vCardData = (__bridge CFDataRef)[vCardString dataUsingEncoding:NSUTF8StringEncoding]; ABAddressBookRef book = ABAddressBookCreate(); ABRecordRef defaultSource = ABAddressBookCopyDefaultSource(book); CFArrayRef vCardPeople = ABPersonCreatePeopleInSourceWithVCardRepresentation(defaultSource, vCardData); for (CFIndex index = 0; index < CFArrayGetCount(vCardPeople); index++) { ABRecordRef person = CFArrayGetValueAtIndex(vCardPeople, index); ABAddressBookAddRecord(book, person, NULL); } CFRelease(vCardPeople); CFRelease(defaultSource); ABAddressBookSave(book, NULL); CFRelease(book); 

Asegúrese de vincular al marco de la libreta de direcciones en su proyecto.

La respuesta de Carter Allen funcionó para mí, excepto que causó que mi aplicación se bloquee en el estado final CFRelease(book);

Resulta que el CFRelease(person); statement debe ser eliminada Al hacerlo, mi aplicación no se bloqueaba. Consulte esta respuesta para get una explicación https://stackoverflow.com/a/1337086/881103

También verifique las secciones Crear regla y Obtener regla en esta página https://developer.apple.com/library/mac/#documentation/CoreFoundation/Conceptual/CFMemoryMgmt/Concepts/Ownership.html

Los contactos son bastante indulgentes y harán todo lo posible para importar su vCard, sin embargo, parece que su dirección no es correcta. Debería haber 7 parameters, separados por punto y coma: apartado postal, número de suite, dirección, ciudad, estado, código postal, país. La mayoría de las personas dejan el apartado de correos (y la suite #), por lo que una dirección típica tiene un punto y coma (o dos) al principio. Si su dirección está mal formada, los parameters pueden terminar en los lugares equivocados.

Los diversos campos en una vCard terminan con un <return> : @ "\ r"

No necesitas CHARSET=utf-8