2016-10-02 3 views
1

이것이 iOS가 비추천 API를 어떻게 처리하는지에 대한 대부분의 질문이라고 생각합니다.왜 비추천 된 ABAddressBook API가 iOS 10을 충돌 시키나요?

나는 아이폰 OS를 8.3+ 지원하는 응용 프로그램을 가지고, 그것은 9.3.x를 통해 잘 작동하지만, 내 응용 프로그램은 사용자가 연락처를 선택 할 때 아이폰 OS (10)에 나누기, 내가 오류는 다음과 같습니다

'CNPropertyNotFetchedException'이라는 캐치되지 않은 예외로 인해 응용 프로그램 종료 중 : '연락처를 가져 왔을 때 속성을 요청하지 않았습니다.'

나는 ABAddressBook API를 사용되지 않는 것을 말한다 another post here을 발견하고 내가 대신 CNContactPickerViewController (및 관련 ContactsUI 클래스)를 사용한다고. 나는 더 이상 사용되지 않는 클래스에서 벗어나 새로운 클래스 인 &으로 옮겨가는 것이 좋습니다. 그러나 해야합니까?

나는 더 이상 사용되지 않는 클래스와 메서드는 대개 이후 버전에서도 계속 지원된다고 생각했습니다. 내 응용 프로그램이 iOS 9.3에서 정상적으로 작동하고 10.0에서 충돌이 발생한다는 것은별로 좋지 않습니다. 특히 배포 목표는 "8.3"이고 기본 SDK는 "최신 (10.0)"입니다. , 일부 코드는 여전히 작동합니다 (`ABAddressBookCreateWithOptions ').

마지막으로 코드를 분석하고 사용 중단 된 API 사용을 모두 강조 할 수있는 좋은 방법이 있습니까? 내 빌드 출력에는 이러한 경고가 표시되지 않습니다.

답변

5

나는 최근이 문제를 다루었습니다. 문제는 사용 권한과 관련이 있습니다.

ABAddressBookGetAuthorizationStatus()으로 전화하십시오. 결과가 kABAuthorizationStatusNotDetermined 인 경우 ABAddressBookRequestAccessWithCompletion으로 전화하여 완료 핸들러를 사용해야합니다. 앱에 권한이 부여 된 후에 만 ​​다른 주소록 API (사용자 선택 도구 포함)를 사용하십시오.

ABPeoplePickerNavigationController을 사용하여 사용자가 주소록에 액세스 할 수있는 권한을 앱에 먼저 부여하지 않고 연락처의 속성을 선택하도록 허용하면 오류가 질문에 게시됩니다.

+1

위에 게시 된 지침을 따르면 ABAddressBook API가 iOS 9에서 작동한다는 것을 확인할 수 있습니다. iOS 9 이상에서 사용해야합니다. –

+0

그건 나를 위해 일했습니다, 고마워요! 나는 그것이 iOS 8과 iOS 9에 허가없이 OK 일을했지만, 이제는 iOS 10이 사용자 권한에 대한 필요성을 강요합니다. 나는 또한 사용자에게 메시지를 보낸 후, 이제 앱의 설정 페이지에 "Contacts "슬라이더가 있다는 것을 발견했다. 그러나 슬라이더를 토글하면 앱에 SIGKILL (9) 신호가 전송되어 바로 닫히게된다. 하지만 사용자가 내 앱으로 다시 전환 할 때 상태 복원으로 인해 중단 된 부분부터 다시 발생하기 때문에 이것은별로 문제가되지 않습니다. 어쨌든 솔루션에 다시 한번 감사드립니다! – Kenster999

+0

예, iOS 10의 새로운 요구 사항입니다. 문제를 해결하는 답변을 수락하는 것을 잊지 마십시오. – rmaddy