2017-01-19 12 views
0

Я хочу создать файл .vcf для совместного использования с аналогичным приложением Android, которое я создал. Я могу создать файл .vcf для одного контакта, но я не могу сделать это для нескольких контактов таким же образом. Я ссылался на эту ссылку, чтобы помочь создать файл vcf для одного контакта.ios: Я хочу создать .vcf/vcard, который содержит все мои контакты. Как мне это сделать?

Create a vcf file to share with different apps

Я хотел бы создать VCF-файл со всеми моими контактами. Как мне это сделать?

P.S- Я работаю над быстрым 2.0.

Спасибо

ответ

1

Я нашел способ сделать это в конце концов.

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 и т. д.

Надеюсь, это поможет кому-то.