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

原文 标签 ios swift ios9 abaddressbook vcf-vcard

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

据我所知,在 iOS 9 中,地址簿的许多功能都已贬值,所以任何人都可以帮助我以正确的方式编写此代码。

最佳答案

您需要的一般部件是:

  • Contacts访问手机通讯录的框架。
  • ContactsUI使用内置 View Controller 访问联系人的框架。
  • 使用 CNContactVCardSerialization.dataWithContacts编码 CNContact数据转换为 VCard 格式。
  • 使用 data.writeToURL 将数据写入文件.
  • 使用 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/

    相关文章:

    iphone - iOS 4.2 - 使用 Apple AirPrint 打印 DOC、PPT、XLS 等?

    ios - 如何在UICollectionView之上呈现UIViewController?

    macos - xcode快速解析文本,例如在php或perl中

    ios - Swift 中 UIImages 的淡入淡出动画

    ios - 带有Swift的Xcode 9中未显示IBDesignable UI

    ios - Swift:如何使所有正在运行的计时器无效?

    swift - Swift 中的 NSCalendar - init 可以返回 nil,但不是可选的

    objective-c - UIAlertController:supportedInterfaceOrientations 被递归调用

    ios - 是什么触发照片库授权请求?的iOS

    ios - Swift iOS 9应用不在设置中