ios:我想创建包含所有联系人的.vcf / vcard。我该怎么做呢?

时间:2017-01-19 06:24:24

标签: ios iphone swift vcard vcf

我想创建一个.vcf文件,与我创建的类似Android应用程序共享。我能够为单个联系人创建.vcf文件,但我无法以相同的方式为多个联系人执行此操作。 我已经参考了这个链接,以帮助为单个联系人创建一个vcf文件。

Create a vcf file to share with different apps

我想创建一个包含所有联系人的vcf文件。我该怎么做?

P.S-我正在研究swift 2.0。

由于

1 个答案:

答案 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

}

以上代码将创建包含所有详细信息的所有联系人列表。您也可以只选择要从所有联系人中获取的密钥(这可以作为您搜索的过滤器)。

然后使用CNContactVCardSerialization

创建一个.vcard文件

func shareContacts(contacts:[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: {})
}

以上代码将为您提供通过Mail,whatsapp等分享的选项。

希望这有助于某人。