2016-07-11 3 views
2

연락처 응용 프로그램에서 iPhone 연락처를 선택하고 .vcf 파일을 생성하며이 파일에 선택한 연락처를 쓰고 서버로 보내고 싶습니다.iPhone 연락처를 프로그래밍 방식으로 .vcf 파일로 내보내기

iOS 9에서 알 수 있듯이 주소록의 많은 기능이 저하되므로 아무도이 코드를 올바른 방식으로 작성하는 것을 도와 줄 수 없습니다. 당신이 필요합니다

+0

귀하의 질문이 너무 광범위합니다. Swift https://www.raywenderlich.com/97936/address-book-tutorial-swift-ios의 AddressBook에서이 자습서를 시작하는 것이 좋습니다. –

답변

3

일반적인 조각은 다음과 같습니다

  1. 휴대 전화의 연락처를 액세스하기위한 Contacts 프레임 워크.
  2. 연락처에 액세스하기 위해 기본 제공보기 컨트롤러를 사용하는 ContactsUI 프레임 워크입니다.
  3. CNContact 데이터를 VCard 형식으로 인코딩하려면 CNContactVCardSerialization.dataWithContacts을 사용하십시오.
  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:"[email protected]") 
let workEmail = CNLabeledValue(label:CNLabelWork, value:"[email protected]") 
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]) 
}