升级到Big Sur(macOS 11.0.1(后,我们的应用程序现在要求用户授予使用蓝牙的权限。然而,据我所知,我们没有运行任何蓝牙代码。我们确实链接到了核心蓝牙,但很长一段时间以来都是这样,而且这个提示还没有出现。
当在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也有。但苹果的文档中并没有提到这个密钥适用于macOS。https://developer.apple.com/documentation/bundleresources/information_property_list/nsbluetoothalwaysusagedescription
所以我的问题是:
- 这个密钥现在适用于macOS吗?我们应该拥有它,尽管文档中说它只适用于其他平台,或者macOS的蓝牙有不同的密钥吗?我还没找到
- 有没有办法控制这种提示,因为我们实际上并没有使用蓝牙代码。我们需要一个特定功能的框架,但它不适用于许多用户,因此在应用程序启动时请求权限是令人困惑的
谢谢!
我对此没有信心,但我今天也遇到了一些关于Big Sur的蓝牙问题。在我的情况下,我从终端运行蓝牙外围设备,最近我也被提示为终端提供蓝牙权限(这是我以前从未见过的(。
出于测试目的,您可以尝试";隐私——蓝牙外围设备使用说明";或";隐私-蓝牙始终使用说明"-看看这是否能解决崩溃(我想会的(。这很奇怪,因为我过去不认为这两项都是必需的,但看起来Big Sur肯定在打击权限。
当你去";签名和能力";,如果存在启用";硬件->蓝牙";在";应用程序沙盒"-我也会尝试一下(你可能还需要启用Location,但我记不起了(。我很好奇修改这个标志是否会改变任何关于权限的内容。
当您链接到CoreBluetooth时,您是否正在使用API?因为权限检查应该发生在第一个API调用上。但是,蓝牙很奇怪,所以它可能会在应用程序启动后立即启动。。。
仔细想想,我实际上从未在应用程序中选择使用蓝牙——它总是从应用程序启动时初始化的,所以我不能说权限检查是什么时候发生的。