[swift] 연락처(Contacts) 정보를 이용한 맵과의 연동 기능 추가하는 방법

iOS 앱을 개발하다보면 연락처(Contacts) 정보를 이용해서 맵과의 연동 기능을 추가해야 하는 경우가 있습니다. 사용자의 연락처에서 주소 정보를 가져와 맵 앱을 이용해서 해당 위치를 표시하는 기능은 많은 유용성이 있습니다. 이번 글에서는 Swift를 사용하여 연락처 정보를 읽어와 맵과의 연동 기능을 추가하는 방법에 대해 알아보겠습니다.

연락처(Contacts) 접근 권한 요청하기

먼저, 연락처에 접근하기 위해서는 info.plist 파일에 NSContactsUsageDescription 키를 추가하여 사용자에게 연락처 정보 접근에 대한 권한을 요청해야 합니다.

<key>NSContactsUsageDescription</key>
<string>우리 앱에서 연락처 정보를 이용하여 맵과의 연동 기능을 추가합니다.</string>

연락처 정보 가져오기

연락처 정보를 가져오기 위해서는 CNContactStore를 사용합니다. 다음은 연락처에서 주소 정보를 가져오는 예제 코드입니다.

import Contacts

let store = CNContactStore()
store.requestAccess(for: .contacts) { (granted, error) in
    if granted {
        let keys = [CNContactGivenNameKey, CNContactFamilyNameKey, CNContactPostalAddressesKey]
        let request = CNContactFetchRequest(keysToFetch: keys as [CNKeyDescriptor])
        
        do {
            try store.enumerateContacts(with: request, usingBlock: { (contact, _) in
                for address in contact.postalAddresses {
                    let label = CNLabeledValue<NSString>.localizedString(forLabel: address.label ?? "")
                    let formattedAddress = CNPostalAddressFormatter.string(from: address.value, style: .mailingAddress)
                    // 주소 정보를 이용하여 맵과의 연동 기능 추가
                }
            })
        } catch {
            print("Error fetching contacts")
        }
    } else {
        print("Access to contacts not granted")
    }
}

맵과의 연동 기능 추가

formattedAddress를 이용하여 맵과의 연동 기능을 추가할 수 있습니다. 주소 정보를 사용하여 맵 앱을 호출하고 해당 위치를 표시하는 방법은 각각의 맵 서비스마다 다를 수 있으므로 해당 맵 서비스의 개발자 문서를 참고하여 구현해야 합니다.

결론

이제 연락처 정보를 읽어와 맵과의 연동 기능을 추가하는 방법에 대해 알아보았습니다. 이를 응용하여 실제 프로젝트에서 유용하게 활용해보시기 바랍니다.

참고: Apple Developer Documentation - Contacts Framework