应用程序的 Info.plist 文件应包含一个 NSBluetoothAlwaysUsageDescription 键,而该键位于 plist 文件中。

32
首先,我想声明我已经查看了这里的Stack Overflow帖子,添加iCoder和Deepak提到的任何一个都没有解决我的问题。
我正在使用React-Native开发我的应用程序,包括我发现的React-Native-Permissions包。他们的文档指出,我应该添加他们的包启用的所有权限,例如位置、相机以及其他所有在那里提到的权限。在我这样做之后,我能够将我的应用程序上传到商店并提交审核。
今天我来到办公室,我看到有一些来自苹果的反馈可用。因此,在完成反馈后,我想再次上传到商店(增加版本号,因为我应该这样做)。
现在,当我像这样在我的info.plist中出现时,我仍然收到标题中提到的消息。
<key>NSBluetoothAlwaysUsageDescription</key>
<string>Our app does not request this permission or utilize this functionality but it is included in our info.plist since our app utilizes the react-native-permissions library, which references this permission in its code.</string>

编辑:

我希望在下面阐明事情,以便找到解决我面临的问题的答案。 标题中给出的错误直接在上传到商店后发生(因此我猜测实际错误是由系统执行的自动检查捕获的)。

下面的答案不能帮助我解决问题,因为更详细的字符串不会被自动系统检查检查。 而且我已经成功地在info.plist中使用了这个字符串来处理其他元素。 除此之外,我发现有人成功地使用了这种策略将他们的应用程序提交到应用商店。 如Gradner在此链接React Native Permission issue 266之后的评论所示。


如果您的问题已得到解答,请确保接受并投票支持一个答案以供参考。 - Deepak Verma
@MikeSli - 你是否也有一个 NSBluetoothPeripheralUsageDescription 键和描述? - DonMag
@DonMag 我刚刚尝试重新上传应用程序,没有NSBluetoothAlwaysUsageDescription密钥,但由于自动过程,它再次失败。 - MikeSli
1
@MikeSli - 我不使用React-Native,但是快速查看了一下“Permissions”包和问题/讨论,我建议你分叉该存储库并删除你不使用的部分(例如蓝牙)。然后你就不必再费心了。 - DonMag
1
@MikeSli - 我在上传构建时也遇到了同样的问题,所以我首先从info.plist的下拉菜单中添加了NSBluetoothPeripheralUsageDescription,但他们仍然以相同的原因拒绝了二进制文件。所以我打开了info.plist作为源代码,并将NSBluetoothPeripheralUsageDescription替换为NSBluetoothAlwaysUsageDescription键,最终它被接受了。 - Sumeet.Jain
显示剩余7条评论
7个回答

65
如果您不使用蓝牙,
只需将以下内容添加到您的Info.plist文件中:
<key>NSBluetoothAlwaysUsageDescription</key>
<string>Our app does not request this permission or utilize this functionality but it is included in our info.plist since our app utilizes the react-native-permissions library, which references this permission in its code.</string>

苹果已经弃用了NSBluetoothPeripheralUsageDescription属性,推荐使用NSBluetoothAlwaysUsageDescription。

详细信息请参见: Apple文档链接

如果您正在使用蓝牙功能,

只需将以下内容添加到您的Info.plist文件中:

<key>NSBluetoothAlwaysUsageDescription</key>
<string>Our app uses bluetooth to find, connect and transfer data between different devices</string>

我不确定为什么这不是答案。 - truedat101
1
不知道是怎么回事,但多亏了这个,我得到了一个稀有的徽章:民粹主义者。 - lellefood

16

有人发布了一个帮助我的答案,但后来又删除了!为了解释这个答案:

在不知道苹果触发错误的原因的情况下向plist添加隐私密钥并不是解决此问题的最佳方法。

在我的情况下,当我进行grep搜索时,我发现在我的project.pbxproj中有一些与CoreBluetooth.framework相关的引用。我删除了引用后,构建和TestFlight上传成功了!

使用以下命令进行搜索:

grep -r -a CoreBluetooth.framework ProjectFolder

我确实同意这个解决方案是最好的,考虑到用户。尽管目前我没有使用这个解决方案,但我会在发布我的应用程序第一次更新时考虑使用它来修复漏洞。或者我可能会考虑fork存储库并删除我不使用的权限。目前,我认为上面的答案是最好的,所以我会将其标记为正确的答案。 - MikeSli
2
我运行了 grep -r -a CoreBluetooth.framework ./* 命令,但是没有找到任何内容。这个警告只会被使用 CoreBluetooth.framework 触发吗?还是有其他短语我必须寻找? - JanithaR
这并没有真正解决问题吧?如果它在info.plist中,为什么还会抱怨权限呢? - User
上面的grep命令产生了一堵难以辨认的文本墙,但是这个命令对我来说更有效,可以找出哪个二进制文件有引用:grep -r -H --binary CoreBluetooth.framework ./* - Jake Stoeffler

6
我找到了根本原因。
在plist中,我们有两个默认选项来输入蓝牙使用情况。
1.Privacy - Bluetooth Peripheral Usage Description 2.Privacy - Bluetooth Always Usage Description
但是,在源代码中,Xcode将此选项保存为以下内容:
1.NSBluetoothPeripheralUsageDescription而不是Privacy - Bluetooth Peripheral Usage Description 2.隐私-蓝牙始终使用说明而不是Privacy - Bluetooth Always Usage Description
所以现在的问题是: NSBluetoothPeripheralUsageDescription已经过时,它期望键“NSBluetoothAlwaysUsageDescription”。
这里是解决方案,在Xcode中以源代码打开plist文件, 复制并粘贴以下键值对。 键:NSBluetoothAlwaysUsageDescription 值:此应用程序需要蓝牙才能bla bla bla。

1
好的,问题就在于我必须将它们两个都包含在 info.plist 文件中才能使其正常工作。虽然第一次上传时同时存在它们两个是行不通的。这可能只是一个简单的拼写错误,但在这种情况下,我总是复制值以确保正确性。 - MikeSli

4

我无法弄清楚第一次为什么不起作用,但今天进入办公室后看到Sumeet.Jain发表的评论,建议我将

NSBluetoothPeripheralUsageDescription键替换为NSBluetoothAlwaysUsageDescription键

实际上会导致错误,提示缺少NSBluetoothPeripheralUsageDescription,正如我们所期望的那样。因此,我重新添加了NSBluetoothPeripheralUsageDescription到我的info.plist中,现在我终于能够将我的应用程序上传到商店了。感谢所有帮助过我的人。

p.s. 我唯一能想到的与昨天不同的事情是,我现在使用Xcode添加了该键,而不是只编辑我用于react-native的编辑器中的info.plist文件。希望这能像对我有帮助一样帮助其他人。


2

好的,我解决了这个问题。

如果您的应用程序正在使用蓝牙,则必须将此添加到info.plist。

NSBluetoothAlwaysUsageDescription

我们的应用程序使用蓝牙来...做某事...

如果您的应用程序不需要蓝牙,但出现了意外提示。

那么:

打开Xcode: 去除CoreBluetooth.framework:

  1. ->您的项目 ->框架-> CoreBluetooth.framework
  2. ->您的项目 ->构建阶段 ->输入搜索“蓝牙”(删除所有相关的“蓝牙”)

它对我有用! 希望能帮到你。


1

对于早于 iOS 13 的部署目标,请将 NSBluetoothAlwaysUsageDescription 和 NSBluetoothPeripheralUsageDescription 两者都添加到您的应用程序信息属性列表文件中。

如果您使用蓝牙,则字符串取决于您。

<key>NSBluetoothAlwaysUsageDescription</key>
    <string>Our app does not request this permission or utilize this functionality but it is included in our info.plist since our app utilizes some library, which references this permission in its code.</string>
    <key>NSBluetoothPeripheralUsageDescription</key>
    <string>Our app does not request this permission or utilize this functionality but it is included in our info.plist since our app utilizes some library, which references this permission in its code.</string>

0

我成功地移除了应用程序打开时的蓝牙权限警告。在我的情况下,问题出在库“react-native-connectivity-status”上。我将该库从版本“1.5.2”降级到“1.5.1”。

以下是步骤:

更改

"react-native-connectivity-status": "^1.5.1",

"react-native-connectivity-status": "1.5.1",

然后执行以下命令:

rm -rf node_modules/
rm package-lock.json
npm i
cd ios/
rm -rf Pods/
pod install

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接