我正在使用Cordova开发适用于iOS / Android的应用程序,该应用程序没有使用蓝牙的任何功能。可能在启动iOS 13之后,我无法将我的应用程序的新版本发布到AppStoreConnect。我收到了Apple发出的一封警报电子邮件,通知我们info-plist中缺少NSBluetoothAlwaysUsageDescription密钥。
如上所述,我的应用程序不需要蓝牙功能,但是某些插件在使用它时可能没有我的意图。
如果有人遇到相同的问题,请让我知道解决方法。
以下是我的环境。
科尔多瓦
插件
我想禁用蓝牙功能,并使我的应用程序传递到AppleStoreConnect。
答案 0 :(得分:0)
如果缺少此字符串,这是您将从审核小组收到的正式声明:
ITMS-90683:Info.plist中缺少目的字符串-您的应用程序代码引用了一个或多个访问敏感用户数据的API。该应用程序的Info.plist文件应包含一个NSBluetoothAlwaysUsageDescription密钥,该密钥具有面向用户的目的字符串,可以清晰,完整地解释您的应用程序为何需要数据。从2019年春季开始,所有提交给App Store的访问用户数据的应用都必须包含用途字符串。如果您使用的是外部库或SDK,则它们可能会引用需要用途字符串的API。 尽管您的应用可能不使用这些API,但仍然需要一个目的字符串。您可以与该库或SDK的开发人员联系,并要求他们发布不包含API的代码版本。
如本声明所述,您使用的其中一个插件很可能引用了蓝牙API。而且,即使您没有不在您的应用中使用此API,您仍然需要提供目标字符串。
因此,最简单,最快的解决方案(以及我本人的工作方式)是:仅提供字符串,审核将通过。您可以使用插件cordova-custom-config
.
*-Info.plist
答案 1 :(得分:0)
我确认该问题来自AdMob SDK(cordova-admob-sdk),这是无Cordova-plugin-admob的依赖项。
您知道使用原因是什么(AdMob SDK中的框架CoreBlueTooth)吗?还是有不使用此框架的解决方案?
答案 2 :(得分:0)
问题是因为插件cordova-admob-sdk
依赖于CoreBluetooth.framework
框架。如果我们可以将插件配置为不依赖于bluetooth
,那就太好了。因此,在插件修复该部分之前,我们可以通过两种不同的方式解决问题。
解决方案1:
一种解决方案是添加一条声明,说明您的应用使用Bluetooth
。可以在您的config.xml
中进行配置。
<platform name="ios">
...
<config-file parent="NSBluetoothAlwaysUsageDescription" platform="ios" target="*-Info.plist">
<string>
This app requires access to your bluetooth. blah blah blah
</string>
</config-file>
...
</platform>
解决方案2:
第二种解决方案是自己删除对CoreBluetooth.framework
的依赖。您可以从Xcode执行此操作。您只需要删除CoreBluetooth.framework
部分下General -> Frameworks, Libraries, and Embedded Content
的条目即可。