2

升级到 Big Sur (macOS 11.0.1) 后,我们的应用程序现在要求用户授予使用蓝牙的权限。但是,据我所知,我们没有运行任何蓝牙代码。我们确实链接了CoreBluetooth,但是一直这样,一直没有出现这个提示。

在 Xcode 12.2 中运行时,它确实会崩溃并显示以下消息:

2020-11-13 13:21:58.685610-0800 Fuze[31049:200367] [access] This app has crashed because it attempted to access privacy-sensitive data without a usage description.  The app's Info.plist must contain an NSBluetoothAlwaysUsageDescription key with a string value explaining to the user how the app uses this data.

但据我所知,NSBluetoothAlwaysUsageDescription仅适用于 iOS 设备。

我怀疑这是 Big Sur 的新功能,因为安全和隐私的系统偏好设置 UI -> 隐私,在 Catalina 中没有蓝牙部分,而在 Bug Sur 中却有。但是 Apple 文档没有提到此密钥适用于 macOS。 https://developer.apple.com/documentation/bundleresources/information_property_list/nsbluetoothalwaysusagedescription

所以我的问题是:

  1. 这个密钥现在是否适用于 macOS 并且我们应该拥有它,即使文档说它仅适用于其他平台,或者 macOS 的蓝牙是否有不同的密钥?我还没有找到一个。
  2. 有没有办法控制这个提示,因为我们实际上并没有使用蓝牙代码。我们需要特定功能的框架,但它不适用于许多用户,因此在应用程序启动时立即请求许可会令人困惑。

谢谢!

4

1 回答 1

0

我对此没有信心,但我今天也遇到了一些关于 Big Sur 的奇怪现象。就我而言,我从终端运行蓝牙外围设备,最近还提示我向终端提供蓝牙权限(我以前从未见过)。

出于测试目的,您可以尝试“隐私 - 蓝牙外围设备使用说明”或“隐私 - 蓝牙始终使用说明” - 看看是否可以解决崩溃问题(我认为可以)。这很奇怪,因为我认为过去不需要其中任何一个 - 但看起来 Big Sur 肯定在打击权限。

当您转到“签名和功能”时,如果在“应用程序沙箱”中有启用“硬件 - > 蓝牙”的选项 - 我也会尝试一下(您可能还需要启用位置,但我不能记起)。我很好奇修改该标志是否会改变有关权限的任何内容。

当您链接到 CoreBluetooth 时,您是否在使用 API?因为权限检查应该发生在第一个 API 调用上。但是,蓝牙很奇怪,所以它可能会在应用程序启动后立即启动......

考虑到这一点,我实际上从未在应用程序中选择性地使用蓝牙——它总是从应用程序启动开始初始化,所以我不能说权限检查何时发生。

于 2020-11-14T05:54:08.530 回答