如何使用iOS的Cordova禁用蓝牙功能以避免丢失NSBluetoothAlwaysUsageDescription的错误

时间:2019-10-13 09:27:46

标签: cordova ios13

我正在使用Cordova开发适用于iOS / Android的应用程序,该应用程序没有使用蓝牙的任何功能。可能在启动iOS 13之后,我无法将我的应用程序的新版本发布到AppStoreConnect。我收到了Apple发出的一封警报电子邮件,通知我们info-plist中缺少NSBluetoothAlwaysUsageDescription密钥。

如上所述,我的应用程序不需要蓝牙功能,但是某些插件在使用它时可能没有我的意图。

如果有人遇到相同的问题,请让我知道解决方法。

以下是我的环境。

科尔多瓦

  • 科尔多瓦7.1.0

插件

  • cordova-admob-sdk 0.22.0“ AdMob SDK”
  • cordova-plugin-admob-free 0.25.0“ Cordova AdMob插件”
  • cordova-plugin-badge 0.8.7“徽章”
  • cordova-plugin-inappbrowser 3.0.0“ InAppBrowser”
  • cordova-plugin-splashscreen 5.0.2“启动画面”
  • cordova-plugin-statusbar 2.4.2“ StatusBar”
  • cordova-plugin-swift-support 3.1.1“ SwiftSupport”
  • cordova-plugin-whitelist 1.3.3“白名单”
  • cordova-plugin-wkwebview-engine 1.1.4“ Cordova WKWebView Engine”
  • cordova-plugin-x-toast 2.6.2“吐司”
  • cordova-promise-polyfill 0.0.2“ cordova-promise-polyfill”
  • cordova-sqlite-storage 2.3.1“ Cordova s​​qlite存储插件”
  • phonegap-plugin-barcodescanner 8.0.0“ BarcodeScanner”
  • phonegap-plugin-push 2.1.3“ PushPlugin”

我想禁用蓝牙功能,并使我的应用程序传递到AppleStoreConnect。

3 个答案:

答案 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的条目即可。

enter image description here