EventKitUI / EKCalendarChooser需要访问联系人 - 为什么?

时间:2016-10-15 12:16:34

标签: ios objective-c iphone privacy eventkit

自2010年以来我有一个现有应用程序,对于iOS 10,现在要求应用程序在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 中包含描述用法的字符串,如下所述: http://useyourloaf.com/blog/privacy-settings-in-ios-10/

但是,我已在Info.plist中添加了相应的密钥。但是,当应用尝试访问日历时,用户会报告应用崩溃。其中一位用户现在设法向我发送崩溃报告,如下所示:

EKCalendarChooser

现在问题是,为什么我的应用需要访问联系人,但我的应用只想读/写日历?

在崩溃的代码中,我打开eventStore requestAccessToEntityType:EKEntityTypeEvent completion:(...),之前我使用<key>NSCalendarsUsageDescription</key>

向用户请求了权限

在我的Info.plist中,我有:
        <string>Storing of leave data</string>
        NSContactsUsageDescription

那么我该如何解决这个问题呢?我必须按崩溃报告的说明添加label吗?为什么?它会导致联系人访问的弹出提示,大多数用户可能认为这是一件坏事吗?

注意:最奇怪的是,在我的所有设备上都无法重现这种崩溃,我只有几个用户报告了这种崩溃。

2 个答案:

答案 0 :(得分:7)

我遇到了同样的问题,并且相信这是因为EKCalendarChooser可以显示哪些联系人正在共享日历。我刚刚关闭所有共享,包括从iCloud系列中删除家庭成员,它不再需要访问联系人。然后,我尝试使用EKCalendarChooser与联系人共享日历,并在我选择联系人后提示其获得许可。

这有点痛苦,但解决方案可能是继续添加一个使用说明,告诉用户显示/修改日历共享详细信息的权限。另一个(也是更痛苦的)替代方案是创建自己的视图来选择日历。

我不确定Apple是故意还是错误,因为我不知道开发人员是否有办法从EKCalendarChooser视图中获取联系信息。

答案 1 :(得分:0)

你说&#34;只有几个用户报告了这种崩溃&#34;。当用户在设置应用程序中禁用日历/联系人/相机等时,应用程序崩溃,并且代码直接尝试访问禁用选项。所以在提出前总是检查授权。 希望这对你有帮助。