2016-10-15 2 views
1

나는 기존의 응용 프로그램은 2010 년부터, 그리고 아이폰 OS (10)와 지금, 앱이 사용을 설명하는 Info.plist에서 문자열을 가지는 것이 필요했다 : http://useyourloaf.com/blog/privacy-settings-in-ios-10/EventKitUI/EKCalendarChooser는 연락처에 액세스해야합니다 - 이유가 무엇입니까? 여기에 설명 된대로

그러나, 나는 이미 해당 키를 추가 내 Info.plist. 그래도 사용자가 캘린더에 액세스하려고하면 앱이 다운되는 경우가 있습니다. 사용자의 하나는 지금 나에게 다음과 같습니다 충돌 보고서를 보내도록 관리 :

Termination Reason: TCC, This app has crashed because it attempted to access 
privacy-sensitive data without a usage description.  
The app's Info.plist must contain an NSContactsUsageDescription key with a string value explaining to the user how the app uses this data. 
Triggered by Thread: 2 

Filtered syslog: 
None found 

Thread 0 name: Dispatch queue: com.apple.main-thread 
Thread 0: 
0 libsystem_kernel.dylib   0x00000001812501a8 0x18124f000 + 4520 
1 libdispatch.dylib    0x000000018113b7ec 0x181128000 + 79852 
2 Contacts      0x000000018aa2c63c 0x18a9c8000 + 411196 
3 Contacts      0x000000018a9f7c40 0x18a9c8000 + 195648 
4 Contacts      0x000000018aa08578 0x18a9c8000 + 263544 
5 EventKitUI      0x000000018f18b5a4 0x18f169000 + 140708 
6 EventKitUI      0x000000018f2a9628 0x18f169000 + 1312296 
7 EventKitUI      0x000000018f2aa3a8 0x18f169000 + 1315752 
8 UIKit       0x000000018843b1b4 0x1880e8000 + 3486132 

이제 질문은, 왜 내 응용 프로그램이 필요하다 액세스 에 연락처을하지만, 내 응용 프로그램은 읽기 전용/쓰기를 원한다 달력? 나는 EKCalendarChooser을 개방하고있는 충돌의 코드에서

, 이전에 내가 가지고 내의 Info.plist에서 eventStore requestAccessToEntityType:EKEntityTypeEvent completion:(...)

를 사용하여 권한을 사용자에게 질문 :
<key>NSCalendarsUsageDescription</key>
<string>Storing of leave data</string>

어떻게 내가 할 이것을 고쳐라? 오류 보고서에 표시된대로 NSContactsUsageDescription을 추가해야합니까? 왜? 그리고 그것은 대부분의 사용자가 아마도 나쁜 것으로 생각할 수있는 연락처 액세스에 대한 팝업 프롬프트로 이어질 것입니까?

참고 : 가장 이상한 점은 내 장치에서이 충돌을 재현 할 수 있다는 것입니다.이 유형의 충돌을보고 한 사용자가 두 명 밖에 없습니다.

+0

안전을 위해 NSContactsUsageDescription을 추가하십시오. 또한 내 앱에 개인 정보 - 사진 라이브러리 사용 설명을 추가하지만 내 앱에는 사진 라이브러리를 사용하지 않습니다. –

+0

그래,하지만 왜? 이유를 알고있을 때 연락처 권한이 필요 없도록 코드를 변경할 수 있습니다. – user826955

답변

5

난 그냥 똑같은 문제가 있었고 EKCalendarChooser가 어떤 연락처가 캘린더를 공유하고 있는지 보여줄 수 있기 때문이라고 생각합니다. 방금 iCloud Family에서 가족 구성원을 삭제하는 것을 포함하여 모든 공유 기능을 끄고 더 이상 주소록에 액세스 할 필요가 없습니다. 그런 다음 EKCalendarChooser를 사용하여 연락처와 캘린더를 공유하려고 시도했으며 연락처를 선택한 후에 권한을 요청했습니다.

다소 힘들지만 해결 방법은 아마도 캘린더 공유 세부 정보를 표시/수정하는 데 필요한 권한을 사용자에게 알려주는 사용 설명을 추가하는 것입니다. 또 다른 (그리고 더 고통스러운) 대안은 달력을 선택하기위한 자신의 견해를 만드는 것입니다.

어쨌든 개발자가 EKCalendarChooser보기에서 연락처 정보에 액세스 할 수있는 방법이 있는지 모르겠으므로 이것이 Apple 또는 버그에 의해 고의적인지 확실하지 않습니다.

+0

그게 전부 였어, 내가 설명을 추가하고 사용자가 응용 프로그램이 지금 작동한다고보고합니다.그러나 실제로 코드에서 트리거하지 않는 한 연락처에 대한 프롬프트가 표시되지 않을 것입니다.이 코드는 실제로는 액세스하지 못합니다 (일정 액세스 프롬프트 만 실행). – user826955

+0

Apple 개발자 포럼에서 이에 대한 토론이 있습니다. https://forums.developer.apple.com/thread/7473 –

0

당신은 "이 종류의 충돌을보고하는 몇 명의 사용자 만 있습니다."라고하셨습니다. 사용자가 캘린더/주소록/카메라 등을 설정 앱에서 사용 중지하면 앱이 다운되고 코드는 직접 사용 중지 된 옵션에 액세스하려고 시도합니다. 그래서 항상 제시하기 전에 승인을 확인하십시오. 희망이 당신을 도울 수 있습니다.

+0

사용자가 전화 설정에서 캘린더에 대한 액세스를 허용했음을 명확하게보고합니다. 이는 내가 할 일을 먼저 알려주기 때문입니다. 또한 허가없이 'EKCalendarChooser'를 실행하면 'EventKitUI'의 자물쇠 아이콘이있는 페이지가 표시됩니다. 문제는 * 일부 사용자가 캘린더에만 액세스 할 때 ** 연락처 **에 대한 개인 정보 사용 설명이 필요한 이유입니다. 그렇지 않으면 앱이 다운됩니다. – user826955

관련 문제