Я нашел способ сделать это в конце концов.
func createContact() -> [CNContact] {
let contactStore = CNContactStore()
var contacts = [CNContact]()
let fetchRequest = CNContactFetchRequest(keysToFetch:[CNContactVCardSerialization.descriptorForRequiredKeys()])
do {
try contactStore.enumerateContactsWithFetchRequest(fetchRequest) {
(contact123, stop) in
// Array containing all unified contacts from everywhere
contacts.append(contact123)}
}
catch {
print("unable to fetch contacts")
}
return contacts
}
Приведенный выше код создаст список всех ваших контактов, который состоит из всех деталей. Вы также можете выбрать только клавиши, которые вы хотите извлечь из всех контактов (это может действовать как фильтр для вашего поиска).
Затем просто создать .vcard файл, используя CNContactVCardSerialization
функ shareContacts (контакты: [CNContact]) бросает {
guard let directoryURL = NSFileManager.defaultManager().URLsForDirectory(.CachesDirectory, inDomains: .UserDomainMask).first else {
return
}
var filename = NSUUID().UUIDString
// Create a human friendly file name if sharing a single contact.
if let contact = contacts.first where contacts.count == 1 {
if let fullname = CNContactFormatter().stringFromContact(contact) {
filename = fullname.componentsSeparatedByString(" ").joinWithSeparator("")
}
}
let fileURL = directoryURL
.URLByAppendingPathComponent(filename)
.URLByAppendingPathExtension("vcf")
let data: NSData?
do {
data = try CNContactVCardSerialization.dataWithContacts(contacts)
print("filename: \(filename)")
print("contact: \(String(data: data!, encoding: NSUTF8StringEncoding))")
do {
try data!.writeToURL(fileURL, options: [.AtomicWrite])
}
catch {
print("eeror\(error)")
}
}
catch {
print("error\(error)")
}
let activityViewController = UIActivityViewController(
activityItems: [fileURL],
applicationActivities: nil
)
presentViewController(activityViewController, animated: true, completion: {})
}
Приведенный выше код даст вам возможность поделиться ею с помощью почты, whatsapp и т. д.
Надеюсь, это поможет кому-то.