In my iPhone app, I want to save the vCards into my iPhone's Contacts when I click onto the vCard which I have.
How can I do that?
I have seen an app on app store which does this:
http://itunes.apple.com/us/app/read-vcard/id402216831?mt=8
Thanks
In my iPhone app, I want to save the vCards into my iPhone's Contacts when I click onto the vCard which I have.
How can I do that?
I have seen an app on app store which does this:
http://itunes.apple.com/us/app/read-vcard/id402216831?mt=8
Thanks
Following is the code for adding user information in iPhone's Contact
.
As I told you that i dont know anything about the vCard
, but this code posted by malinois in their answer here might be of use:
ABAddressBookRef addressBook = ABAddressBookCreate(); // create address book record
ABRecordRef person = ABPersonCreate(); // create a person
NSString *phone = @"0123456789"; // the phone number to add
//Phone number is a list of phone number, so create a multivalue
ABMutableMultiValueRef phoneNumberMultiValue = ABMultiValueCreateMutable(kABPersonPhoneProperty);
ABMultiValueAddValueAndLabel(phoneNumberMultiValue ,phone,kABPersonPhoneMobileLabel, NULL);
ABRecordSetValue(person, kABPersonFirstNameProperty, @"FirstName" , nil); // first name of the new person
ABRecordSetValue(person, kABPersonLastNameProperty, @"LastName", nil); // his last name
ABRecordSetValue(person, kABPersonPhoneProperty, phoneNumberMultiValue, &anError); // set the phone number property
ABAddressBookAddRecord(addressBook, person, nil); //add the new person to the record
ABRecordRef group = ABGroupCreate(); //create a group
ABRecordSetValue(group, kABGroupNameProperty,@"My Group", &error); // set group's name
ABGroupAddMember(group, person, &error); // add the person to the group
ABAddressBookAddRecord(addressBook, group, &error); // add the group
ABAddressBookSave(addressBook, nil); //save the record
CFRelease(person); // relase the ABRecordRef variable
New Contacts Framework introduced with iOS9, saving vCard data into iPhone's contacts is much easier and simpler with Swift4.
import Contacts
func saveVCardContacts (vCard : Data) { // assuming you have alreade permission to acces contacts
if #available(iOS 9.0, *) {
let contactStore = CNContactStore()
do {
let saveRequest = CNSaveRequest() // create saveRequests
let contacts = try CNContactVCardSerialization.contacts(with: vCard) // get contacts array from vCard
for person in contacts{
saveRequest.add(person as! CNMutableContact, toContainerWithIdentifier: nil) // add contacts to saveRequest
}
try contactStore.execute(saveRequest) // save to contacts
} catch {
print("Unable to show the new contact") // something went wrong
}
}else{
print("CNContact not supported.") //
}
}
saveRequest.add(person as! CNMutableContact, toContainerWithIdentifier: nil)
crashes for me. It says that it "could not cast value of type 'CNContact' (0x1142c85f8) to 'CNMutableContact' (0x1142c7568)". Swift 3, iOS 9. –
Ironwood Following is the code for adding user information in iPhone's Contact
.
As I told you that i dont know anything about the vCard
, but this code posted by malinois in their answer here might be of use:
ABAddressBookRef addressBook = ABAddressBookCreate(); // create address book record
ABRecordRef person = ABPersonCreate(); // create a person
NSString *phone = @"0123456789"; // the phone number to add
//Phone number is a list of phone number, so create a multivalue
ABMutableMultiValueRef phoneNumberMultiValue = ABMultiValueCreateMutable(kABPersonPhoneProperty);
ABMultiValueAddValueAndLabel(phoneNumberMultiValue ,phone,kABPersonPhoneMobileLabel, NULL);
ABRecordSetValue(person, kABPersonFirstNameProperty, @"FirstName" , nil); // first name of the new person
ABRecordSetValue(person, kABPersonLastNameProperty, @"LastName", nil); // his last name
ABRecordSetValue(person, kABPersonPhoneProperty, phoneNumberMultiValue, &anError); // set the phone number property
ABAddressBookAddRecord(addressBook, person, nil); //add the new person to the record
ABRecordRef group = ABGroupCreate(); //create a group
ABRecordSetValue(group, kABGroupNameProperty,@"My Group", &error); // set group's name
ABGroupAddMember(group, person, &error); // add the person to the group
ABAddressBookAddRecord(addressBook, group, &error); // add the group
ABAddressBookSave(addressBook, nil); //save the record
CFRelease(person); // relase the ABRecordRef variable
I can't help you for coding, but I have found the common format of vCard in previous post. You can try to achieve your task using this format. The left side values are always static. Hope if you can use that way.
For just reference, i found googling... (support for all 3 mobile platforms)
http://learnyii.blogspot.com/2011/04/vcard-qr-code-iphone-android-blackberry.html
func saveContactsfromVCard(vCard : Data)
{
let contactStore = CNContactStore()
do {
let saveRequest = CNSaveRequest() // create saveRequests
let fetchedContacts = try CNContactVCardSerialization.contacts(with: vCard)
for person in fetchedContacts{
let mutableContact = person.mutableCopy() as! CNMutableContact
saveRequest.add(mutableContact, toContainerWithIdentifier: nil)
// saveRequest.add(person, toContainerWithIdentifier: nil) // add contacts to saveRequest
}
try contactStore.execute(saveRequest) // save to contacts
let alert1 = UIAlertController(title: "Successful", message: "Contacts Added Successfully!", preferredStyle: UIAlertController.Style.alert)
alert1.addAction(UIAlertAction(title: "Ok", style: UIAlertAction.Style.default, handler:
{(alertAction) in
}))
self.present(alert1, animated: true, completion: nil)
} catch {
print("Unable to show the new contact")
}else{
print("Contacts not added")
}
}
ABMutableMultiValueRef date = ABRecordCopyValue(newPerson, kABPersonDateProperty);
ABMultiValueAddValueAndLabel(date, dateTextField.text, kABPersonAnniversaryLabel, NULL);
ABRecordSetValue(newPerson, kABPersonDateProperty, date,nil);
© 2022 - 2024 — McMap. All rights reserved.