在 Big Sur (11.0.1) 上提示蓝牙权限
Prompting for Bluetooth permission on Bug Sur (11.0.1)
升级到 Big Sur (macOS 11.0.1) 后,我们的应用程序现在要求用户授予使用蓝牙的权限。但是,据我所知,我们没有 运行 任何蓝牙代码。我们对CoreBluetooth做了link,但是已经这样很久了,一直没有出现这个提示
当 运行 在 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
所以我的问题是:
- 这个密钥现在是否适用于 macOS 并且我们应该拥有它,即使文档说它只适用于其他平台,或者是否有一个不同的 macOS 蓝牙密钥?我还没找到。
- 有没有办法控制这个提示与否,因为我们实际上并没有使用蓝牙代码。我们需要特定功能的框架,但它不适用于许多用户,因此在应用程序启动时立即请求权限会让人感到困惑。
谢谢!
我对此没有信心,但我今天也 运行在 Big Sur 奇怪的地方使用了一些蓝牙。在我的例子中,我 运行 来自终端的蓝牙外围设备,并且最近还提示我为终端提供蓝牙许可(我以前从未见过)。
出于测试目的,您可以尝试“隐私 - 蓝牙外围设备使用说明”或“隐私 - 蓝牙始终使用说明” - 看看是否可以解决崩溃问题(我假设会)。这很奇怪,因为我认为过去不需要这些 - 但看起来 Big Sur 肯定会打击权限。
当您转到“签名和功能”时,如果“应用程序沙盒”中有启用“硬件 -> 蓝牙”的选项 - 我也会尝试一下(您可能还需要启用位置,但我不记得了)。我很好奇修改该标志是否会改变有关权限的任何内容。
当您 link 到 CoreBluetooth 时,您是否在使用 API?因为权限检查应该在第一个 API 调用时发生。但是,蓝牙很奇怪,所以它可能会在应用程序启动后立即启动...
考虑到这一点,我实际上从来没有在应用程序中选择性地使用蓝牙——它总是从应用程序启动时初始化,所以我不能说什么时候进行权限检查。
升级到 Big Sur (macOS 11.0.1) 后,我们的应用程序现在要求用户授予使用蓝牙的权限。但是,据我所知,我们没有 运行 任何蓝牙代码。我们对CoreBluetooth做了link,但是已经这样很久了,一直没有出现这个提示
当 运行 在 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
所以我的问题是:
- 这个密钥现在是否适用于 macOS 并且我们应该拥有它,即使文档说它只适用于其他平台,或者是否有一个不同的 macOS 蓝牙密钥?我还没找到。
- 有没有办法控制这个提示与否,因为我们实际上并没有使用蓝牙代码。我们需要特定功能的框架,但它不适用于许多用户,因此在应用程序启动时立即请求权限会让人感到困惑。
谢谢!
我对此没有信心,但我今天也 运行在 Big Sur 奇怪的地方使用了一些蓝牙。在我的例子中,我 运行 来自终端的蓝牙外围设备,并且最近还提示我为终端提供蓝牙许可(我以前从未见过)。
出于测试目的,您可以尝试“隐私 - 蓝牙外围设备使用说明”或“隐私 - 蓝牙始终使用说明” - 看看是否可以解决崩溃问题(我假设会)。这很奇怪,因为我认为过去不需要这些 - 但看起来 Big Sur 肯定会打击权限。
当您转到“签名和功能”时,如果“应用程序沙盒”中有启用“硬件 -> 蓝牙”的选项 - 我也会尝试一下(您可能还需要启用位置,但我不记得了)。我很好奇修改该标志是否会改变有关权限的任何内容。
当您 link 到 CoreBluetooth 时,您是否在使用 API?因为权限检查应该在第一个 API 调用时发生。但是,蓝牙很奇怪,所以它可能会在应用程序启动后立即启动...
考虑到这一点,我实际上从来没有在应用程序中选择性地使用蓝牙——它总是从应用程序启动时初始化,所以我不能说什么时候进行权限检查。