[swift] 연락처(Contacts) 정보를 다른 앱과 연동하는 방법

iOS 앱에서 연락처 정보를 사용자의 편의를 위해 활용하고 싶다면 연락처 액세스 권한을 획들해야 합니다. 이번에는 Swift를 사용하여 사용자의 연락처 정보를 읽고, 쓰는 방법을 알아보겠습니다.

연락처 액세스 권한 요청

첫 번째로 해야 할 일은 사용자에게 연락처 액세스 권한을 요청하는 것입니다. 아래의 코드를 사용하여 info.plist 파일에 앱이 연락처에 접근할 수 있도록 권한을 요청할 수 있습니다.

<key>NSContactsUsageDescription</key>
<string>연락처 액세스 권한이 필요합니다.</string>

이렇게 하면 사용자에게 연락처 액세스에 대한 권한을 요청하는 팝업이 표시됩니다.

연락처 정보 읽기

이제 연락처 정보를 읽는 방법을 알아보겠습니다. 먼저 Contacts 프레임워크를 import 해야 합니다.

import Contacts

그리고 아래의 코드를 사용하여 연락처 정보를 읽을 수 있습니다.

// 연락처 스토어 객체 만들기
let store = CNContactStore()

// 연락처 접근 권한 요청
store.requestAccess(for: .contacts) { (granted, error) in
    if granted {
        // 권한이 허용된 경우
        let keys = [CNContactGivenNameKey, CNContactFamilyNameKey, CNContactEmailAddressesKey]
        let request = CNContactFetchRequest(keysToFetch: keys as [CNKeyDescriptor])
        
        do {
            try store.enumerateContacts(with: request) {
                (contact, stoppingPointer) in
                // 연락처 정보 사용
                let firstName = contact.givenName
                let lastName = contact.familyName
                let emails = contact.emailAddresses
                // ... 
            }
        } catch {
            // 에러 처리
        }
    } else {
        // 권한이 거부된 경우
    }
}

위의 코드는 사용자가 연락처 액세스 권한을 허용한 경우, 사용자의 연락처 정보를 읽어올 수 있습니다.

연락처 정보 쓰기

만약 앱이 연락처에 정보를 추가하거나 수정하고자 한다면 CNMutableContact를 사용하여 연락처 정보를 작성할 수 있습니다.

// CNMutableContact 생성
let newContact = CNMutableContact()
newContact.givenName = "홍길동"
newContact.familyName = "홍"
newContact.emailAddresses = [CNLabeledValue(label: CNLabelWork, value: "hong@example.com")]

// 저장
let saveRequest = CNSaveRequest()
saveRequest.add(newContact, toContainerWithIdentifier: nil)

do {
    try store.execute(saveRequest)
} catch {
    // 에러 처리
}

위의 예제는 “홍길동”이라는 새로운 연락처를 생성하고 저장하는 방법을 보여줍니다.

연락처 액세스를 통해 사용자의 연락처 정보를 읽거나 쓰는 것은 매우 민감한 작업이므로 사용자의 프라이버시를 최우선으로 생각하여 안전하게 다루어야 합니다.

항상 사용자에게 왜 연락처 액세스 권한이 필요한지 설명하고, 사용자의 동의를 얻은 후에만 연락처 정보를 사용해야 합니다.

참고 자료