macos - 联系方式以及安全和隐私

标签 macos cocoa osx-mountain-lion contacts

这是我直到一个小时左右才知道的事情,但如果您的应用程序尝试通过 ABAddressBook 访问联系人(以前是地址簿)数据类中,将提示用户确认,就像当 iOS 应用程序尝试访问联系人数据时提示您确认一样。然后安全和隐私首选项 Pane 将会更新,您将看到您的应用程序列在隐私列表下。

enter image description here

因此,如果您尝试在应用程序被阻止的情况下访问联系人数据,您将收到 Xcode 的错误,指出“地址簿访问被拒绝,路径中的可执行文件...”您可以使用 ABAddressBookGetAuthorizationStatus 检查隐私状态() 在 iOS 中。 如何确定您的应用程序在 OS X 中是否具有隐私权限?

此外,如果您有答案,我想知道 Mac OS 将“隐私”选项卡下的应用程序列表存储在哪里?我检查了用户的首选项文件夹。但我没有看到任何文件。

感谢您的帮助。

//编辑 1// 以下是应用程序尝试使用 ABAddressBook *addressBook = [ABAddressBook sharedAddressBook]; 访问 ABAddressBook 时显示的错误输出:

2013-08-14 21:47:59.796 AppName[5374:1803] Address book access is denied for executable at path: /Users/Jim/Library/Developer/Xcode/DerivedData/AppName-eymlymijdmbqaldaqcaecgdyroxa/Build/Products/Debug/AppName.app/Contents/MacOS/AppName
(
    0   AddressBook                         0x00007fff8a1232fc __ABIsAccessGranted_block_invoke_0 + 36
    1   libdispatch.dylib                   0x00007fff93f5b0b6 _dispatch_client_callout + 8
    2   libdispatch.dylib                   0x00007fff93f5b041 dispatch_once_f + 50
    3   AddressBook                         0x00007fff8a123258 ABIsAccessGranted + 40
    4   AddressBook                         0x00007fff8a12319e +[ABAddressBook sharedAddressBook] + 12
    5   AppName                              0x00000001000180e7 -[AppDelegate extractWorkAddresses] + 55
    6   AppName                              0x0000000100011a68 -[AppDelegate extractWork1Address:] + 72
    7   AppKit                              0x00007fff8c9f6989 -[NSApplication sendAction:to:from:] + 342
    8   AppKit                              0x00007fff8cb2c37c -[NSMenuItem _corePerformAction] + 406
    9   AppKit                              0x00007fff8cb2c06a -[NSCarbonMenuImpl performActionWithHighlightingForItemAtIndex:] + 133
    10  AppKit                              0x00007fff8c81928f -[NSMenu _internalPerformActionForItemAtIndex:] + 36
    11  AppKit                              0x00007fff8c819117 -[NSCarbonMenuImpl _carbonCommandProcessEvent:handlerCallRef:] + 135
    12  AppKit                              0x00007fff8cb25175 NSSLMMenuEventHandler + 342
    13  HIToolbox                           0x00007fff8a84cd1a _ZL23DispatchEventToHandlersP14EventTargetRecP14OpaqueEventRefP14HandlerCallRec + 1206
    14  HIToolbox                           0x00007fff8a84c1e9 _ZL30SendEventToEventTargetInternalP14OpaqueEventRefP20OpaqueEventTargetRefP14HandlerCallRec + 410
    15  HIToolbox                           0x00007fff8a861fc9 SendEventToEventTarget + 40
    16  HIToolbox                           0x00007fff8a898ca9 _ZL18SendHICommandEventjPK9HICommandjjhPKvP20OpaqueEventTargetRefS5_PP14OpaqueEventRef + 443
    17  HIToolbox                           0x00007fff8a83da21 SendMenuCommandWithContextAndModifiers + 59
    18  HIToolbox                           0x00007fff8a83d9d3 SendMenuItemSelectedEvent + 254
    19  HIToolbox                           0x00007fff8a83d85f _ZL19FinishMenuSelectionP13SelectionDataP10MenuResultS2_ + 94
    20  HIToolbox                           0x00007fff8a8198bb _ZL14MenuSelectCoreP8MenuData5PointdjPP13OpaqueMenuRefPt + 605
    21  HIToolbox                           0x00007fff8a818ec8 _HandleMenuSelection2 + 565
    22  AppKit                              0x00007fff8c9e48f6 _NSHandleCarbonMenuEvent + 245
    23  AppKit                              0x00007fff8c906acf _DPSNextEvent + 2073
    24  AppKit                              0x00007fff8c905e22 -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:] + 128
    25  AppKit                              0x00007fff8c8fd1d3 -[NSApplication run] + 517
    26  AppKit                              0x00007fff8c8a1c06 NSApplicationMain + 869
    27  AppName                              0x0000000100002092 main + 34
    28  AppName                              0x0000000100002064 start + 52
)

最佳答案

如果用户授予访问权限,您的应用程序就可以照常访问 ABAddressBook。如果用户拒绝访问,ABAddressBookaddressBooksharedAddressBook 方法将返回 nil。

<小时/>

我认为没有办法避免该异常(这与文档所说的应该发生的情况不符)。因此,您可以添加尝试将 sharedAddressBook 放入 try catch block 的代码部分,并避免抛出异常时应用程序死亡。

关于macos - 联系方式以及安全和隐私,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18223537/

相关文章:

javascript - 错误!安装无法读取 mac 上的依赖项

cocoa - 走核心数据图的多关系总是显得很尴尬,有更好的方法吗?

macos - 在没有 Mac 开发者成员(member)资格的情况下绕过 Mac OS X 应用程序中的 Gatekeeper

macos - nm 找不到符号时处理 "dyld: lazy symbol binding failed: Symbol not found"错误

macos - 如何使用核心图像设置白点、黑点和中点?

ruby-on-rails - Mac(计算机)对 Rails 开发人员有什么好处?

macos - ZSH 'Sticky' 提示符

xcode - 调整 ImageView 大小以适合图像,而不是其他方式

objective-c - cocoa WebView : Load-time when computer idles

unicode - Google 计算器中的特殊字符