아이폰 주소록 Contacts 가져오기 swift4
아이폰 주소록 Contacts 가져오기 swift4
아이폰 앱 개발 공부 중 핸드폰에 있는 연락처를 가져와서 textField에 설정하는 과정을 진행하고 있는데... 직접 주소록을 열어서 접근할 수 있는 방법이 있는지는 좀 더 공부를 해봐야 알겠지만 일단 지금까지 공부한 내용은 주소록에 있는 이름과 번호를 모두 가져와서 TableView에 뿌려준 후 해당 번호를 선택하면 자동으로 textField에 입력이 되도록 하는 과정까지 마무리를 했다.
나쁜 내 머리로 나중에 또 생각이 나지 않을까 싶어 그 과정의 핵심 내용만 이렇게 정리를 해 놓는다. (그냥 제 머리 속에 있는 내용만 정리하는 글이니 혹시 이 글을 보시는 분들이 있다면 참고 부탁드립니다.)
'테이블뷰'의 Content는 Dynamic Prototypes로 했으며 Prototype Cells는 1로 설정을 했다.
그냥 번호나 이름만 출력되면 허전할 듯 싶어서 셀의 스타일은 Right Detail을 선택한 후 오른쪽 Label에 [선택]이라는 text를 넣었다. 그리고 Title에는 번호 없이 이름만 출력하도록 할 것이다. 물론 Title이나 '선택' text가 입력된 부분에 번호를 함께 출력하도록 할 수는 있겠지만 개인적으로 번호까지 출력되면 조금 지저분해 보여서 제외하기로 했으며 이 셀을 tableView에 뿌릴 때 필요한 identifier는 "rowcell"로 설정을 했다.
그리고 아이폰 앱에서 주소록에 접근하기 위해서는 info.plist에서 [Privacy - Contacts Usage Description] 프라이버시 설정을 해야 한다.
Controll 스위프트 파일에서는 주소록에 접근하기 위해 Contacts를 import 한 후 CNContactStroe() 객체를 만들어서 view가 열리기 직전에 실행되는 viewWillAppear 메서드에서 주소록에 접근을 시도한 후 성공하면 메시지를 출력하도록 했다.
다음은 아이폰 주소록에 접근해서 데이터를 가져오기 위한 함수인 fetchContacts() 메서드는 다음과 같이 정의를 했다. 일단 주소록의 '성'과 '이름' 그리고 '번호'에 접근하기 위한 CNContactGivenNameKey, CNContactFamilyNameKey, CNContactPhoneNumbersKey키를 설정한 후 requestAccess로 접근을 시도했을 때 주소록 접근 권한이 있으면 성과 이름, 번호를 가져오도록 했으며 그렇지 않을 때는 메시지를 띄우도록 했다.
테이블뷰의 셀을 반환하는 함수에서는 앞에서 만든 [rowcell]을 가져와서 거기에 있는 Title Label에 contacts에서 가져온 이름을 출력하도록 했다. 주석 처리된 numberLabel은 [선택]이라는 텍스트를 입력하는 게 더 괜찮을 거 같아서 아웃렛 연결을 제거한 후 주석 처리를 해버렸는데 상황에 따라서 번호를 뿌려줄 수도 있을 것이다.