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

标签 ios swift ios9 abaddressbook vcf-vcard

我想在联系人应用程序中选择 iPhone 联系人,生成 .vcf 文件,将选择的联系人写入此文件并发送到服务器。

据我所知,在 iOS 9 中,地址簿的许多功能都被贬低了,所以谁能帮助我以正确的方式编写这段代码。

最佳答案

您需要的一般部件是:

  1. Contacts用于访问手机联系人的框架。
  2. ContactsUI使用内置 View Controller 访问联系人的框架。
  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])
}

关于ios - 以编程方式将 iPhone 联系人导出到 .vcf 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38308440/

相关文章:

ios - 适用于 iOS 和 WatchOS 应用程序的类(class)?

iphone - Xcode 7 iOS 9 - 显示黑屏和白色 Apple Logo 的模拟器

ios - 来自一个代码库的多个应用程序 - Xcode 中的多个项目或目标?

ios - 登录后保存 userDefault token

ios - [NSPlaceholderString initWithString :]: nil argument' on iOS13

ios - 如何从 UIBezierPath 创建 IBDesignable 自定义 UIView?

ios - 用 Dictionary 类型的参数声明的函数显示另一个参数类型

ios - 根据内容调整 uiscrollview 的大小

ios - 从 XCode 运行时找不到钥匙串(keychain)值

iOS 9 启动服务 : ERROR: There is no registered handler for URL scheme itms-services