以编程方式将iPhone联系人导出到.vcf文件

Sal*_*mua 4 vcf abaddressbook ios swift ios9

我想在通讯录应用程序中选择iPhone通讯录,生成.vcf文件,在该文件中写入所选的通讯录并发送到服务器。

正如我在iOS 9中所知道的,通讯录的许多功能已被弃用,因此任何人都可以帮助我以正确的方式编写此代码。

Luk*_* In 5

您将需要的一般部件是:

  1. 用于访问电话联系人的联系人框架。
  2. ContactsUI框架使用内置的视图控制器的访问联系人。
  3. 使用CNContactVCardSerialization.dataWithContactsCNContact数据编码为VCard格式。
  4. 使用data.writeToURL将数据写入文件。
  5. 使用NSURLSession将数据上传到服务器。

下面是一个示例,回答了将联系人保存为VCard格式的问题。

import Contacts

// Creating a mutable object to add to the contact
let contact = CNMutableContact()

contact.imageData = NSData() // The profile picture as a NSData object

contact.givenName = "John"
contact.familyName = "Appleseed"

let homeEmail = CNLabeledValue(label:CNLabelHome, value:"john@example.com")
let workEmail = CNLabeledValue(label:CNLabelWork, value:"j.appleseed@icloud.com")
contact.emailAddresses = [homeEmail, workEmail]

contact.phoneNumbers = [CNLabeledValue(
    label:CNLabelPhoneNumberiPhone,
    value:CNPhoneNumber(stringValue:"(408) 555-0126"))]

let homeAddress = CNMutablePostalAddress()
homeAddress.street = "1 Infinite Loop"
homeAddress.city = "Cupertino"
homeAddress.state = "CA"
homeAddress.postalCode = "95014"
contact.postalAddresses = [CNLabeledValue(label:CNLabelHome, value:homeAddress)]

let birthday = NSDateComponents()
birthday.day = 1
birthday.month = 4
birthday.year = 1988  // You can omit the year value for a yearless birthday
contact.birthday = birthday


let data = try CNContactVCardSerialization.dataWithContacts([contact])

let s = String(data: data, encoding: NSUTF8StringEncoding)

if let directoryURL = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask).first {

    let fileURL = directoryURL.URLByAppendingPathComponent("john.appleseed").URLByAppendingPathExtension("vcf")

    try data.writeToURL(fileURL, options: [.AtomicWrite])
}
Run Code Online (Sandbox Code Playgroud)